Ekran Ostatnie, nazywany również ekranem Przegląd, ostatnie zadanie „lista” lub „ekran ostatnich aplikacji” to interfejs systemu na poziomie systemu, który zawiera listę ostatnio używanych aktywności i zadaniach. Użytkownik może poruszać się po liście, wybrać zadanie, które ma zostać wykonane wznów zadanie lub usuń zadanie z listy, przesuwając je poza ekran.
Na ekranie Ostatnie używane jest narzędzie oparte na dokumentach – w Androidzie 5.0 (interfejs API) poziomu 21), w którym wiele wystąpień ta sama aktywność obejmująca różne dokumenty może pojawić się jako zadania w Ekran ostatnich. Na przykład Dysk Google może mieć przypisane zadanie dla każdej z tych kategorii: kilka dokumentów Google. Każdy dokument jest wyświetlany jako zadanie w Ostatnich ekran:
Innym typowym przykładem jest sytuacja, w której użytkownik korzysta z przeglądarki i klika przycisk Udostępnij > Gmail: Pojawi się ekran Utwórz w aplikacji Gmail. Naciśnij Przycisk Ostatnie powoduje, że Chrome i Gmail działają jako osobne zadania:
Zwykle pozwalasz systemowi określić, jak Twoje zadania i działania są widoczna na ekranie Ostatnie. Nie musisz tego zmieniać zachowanie użytkownika. Aplikacja może jednak określić, w jaki sposób i kiedy aktywność ma się pojawiać w Ekran ostatnich.
ActivityManager.AppTask
pozwala zarządzać zadaniami, a flagi aktywności
Klasa Intent
pozwala określić, kiedy
aktywność jest dodawana do ekranu Ostatnie lub z niego usuwana. Dodatkowo
Atrybuty <activity>
pozwalają określić
zachowanie w pliku manifestu.
Dodawanie zadań do ekranu Ostatnie
za pomocą flag klasy Intent
do:
dodanie zadania daje większą kontrolę nad tym, kiedy i jak dokument zostanie otwarty lub
ponownie otwarte na ekranie Ostatnie. Jeśli używasz tagu
<activity>
, możesz
wybrać, czy dokument ma być zawsze otwierany w nowym zadaniu czy też używać istniejącego
dla danego dokumentu.
Dodaj zadanie za pomocą flagi intencji
Gdy tworzysz nowy dokument aktywności, wywołujesz funkcję
startActivity()
i przekazując do niej intencję uruchamiającą działanie. Aby wstawić operator logiczny
by system traktował Twoją aktywność jako nowe zadanie w sekcji Ostatnie
na ekranie, prześlij
FLAG_ACTIVITY_NEW_DOCUMENT
flaga w addFlags()
metody Intent
, która uruchamia
działania.
Jeśli ustawisz FLAG_ACTIVITY_MULTIPLE_TASK
podczas tworzenia nowego dokumentu, system zawsze utworzy nowe zadanie z
jako aktywność podstawową. To ustawienie pozwala na
otwarty w więcej niż 1 zadaniu. Poniższy kod pokazuje, w jaki sposób główny
działanie polega na:
Kotlin
fun createNewDocument(view: View) { val newDocumentIntent = newDocumentIntent() if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) } startActivity(newDocumentIntent) } private fun newDocumentIntent(): Intent = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++) }
Java
public void createNewDocument(View view) { final Intent newDocumentIntent = newDocumentIntent(); if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); } startActivity(newDocumentIntent); } private Intent newDocumentIntent() { boolean useMultipleTasks = checkbox.isChecked(); final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++); return newDocumentIntent; } }
Gdy główne działanie uruchamia nową aktywność, system przeszukuje przez
istniejących zadań dla konta, którego intencja pasuje do nazwy komponentu intencji i
do danych o zamiarach związanych z aktywnością. Jeśli zadanie nie zostało znalezione lub zawiera intencja
FLAG_ACTIVITY_MULTIPLE_TASK
zostanie utworzone nowe zadanie, którego głównym elementem będzie aktywność.
Jeśli system znajdzie zadanie, którego intencja pasuje do nazwy komponentu intencji oraz
danych intencji, przenosi to zadanie na wierzch i przekazuje nowy zamiar
onNewIntent()
Nowe działanie otrzymuje intencję i tworzy nowy dokument w sekcji Ostatnie.
Jak w tym przykładzie:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_document) documentCount = intent .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0) documentCounterTextView = findViewById(R.id.hello_new_document_text_view) setDocumentCounterText(R.string.hello_new_document_counter) } override fun onNewIntent(newIntent: Intent) { super.onNewIntent(newIntent) /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity will be reused. */ setDocumentCounterText(R.string.reusing_document_counter) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_document); documentCount = getIntent() .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0); documentCounterTextView = (TextView) findViewById( R.id.hello_new_document_text_view); setDocumentCounterText(R.string.hello_new_document_counter); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity is reused to create a new document. */ setDocumentCounterText(R.string.reusing_document_counter); }
Dodaj zadanie za pomocą atrybutu activity
Działanie może również wskazywać w swoim manifeście, że zawsze jest uruchamiany w nowym
za pomocą funkcji <activity>
dla atrybutu android:documentLaunchMode
.
Ten atrybut ma 4 wartości, które powodują następujące efekty, gdy użytkownik
otwiera dokument przy użyciu aplikacji:
intoExisting
- Aktywność polega na ponownym użyciu istniejącego zadania w dokumencie. Przypomina to ustawianie
FLAG_ACTIVITY_NEW_DOCUMENT
flagę bez ustawianiaFLAG_ACTIVITY_MULTIPLE_TASK
. zgodnie z opisem w Dodawanie sekcji zadania przy użyciu flagi intencji. always
- Ta czynność powoduje utworzenie nowego zadania dla dokumentu, nawet jeśli dokument to
już otwarte. Użycie tej wartości jest równoważne z ustawieniem zarówno wartości
Flagi
FLAG_ACTIVITY_NEW_DOCUMENT
iFLAG_ACTIVITY_MULTIPLE_TASK
. none
- Ta aktywność nie powoduje utworzenia nowego zadania w dokumencie. Ostatnie domyślnie będzie traktować tę aktywność tak, jakby miała to miejsce. Wyświetla jedno zadanie w przypadku aplikacji, które wznawiają się po ostatniej aktywności wywołanej przez użytkownika.
never
- Ta aktywność nie powoduje utworzenia nowego zadania w dokumencie. Ustawianie tej wartości
zastępuje działanie funkcji
FLAG_ACTIVITY_NEW_DOCUMENT
iFLAG_ACTIVITY_MULTIPLE_TASK
flagami. Jeśli któraś z tych opcji jest ustawiona w intencji, a ekran Ostatnie wyświetla jedno zadanie dla aplikacji, jest wznawiane od dowolnego przed wywołaniem użytkownika. .
Usuwanie zadań
Domyślnie zadanie dotyczące dokumentu jest automatycznie zamykane z ekranu Ostatnie.
gdy jej działanie się zakończy. Możesz zastąpić to zachowanie za pomocą parametru
ActivityManager.AppTask
z klasą, z flagą Intent
lub z
atrybut <activity>
.
Zawsze możesz całkowicie wykluczyć zadanie z ekranu Ostatnie, ustawiając
atrybut <activity>
android:excludeFromRecents
.
do true
.
Możesz ustawić maksymalną liczbę zadań, które aplikacja może uwzględnić w
Na ekranie Ostatnie możesz ustawić
<activity>
atrybut
android:maxRecents
na
jest liczbą całkowitą. Po osiągnięciu maksymalnej liczby zadań
Ostatnio używane zadanie znika z ekranu Ostatnie. Wartością domyślną jest 16.
a wartość maksymalna to 50 (25 w przypadku urządzeń z małą ilością pamięci). Mniejsze wartości
są nieprawidłowe niż 1.
Usuwanie zadań przy użyciu klasy AppTask
W aktywności, która tworzy nowe zadanie na ekranie Ostatnie, możesz użyć opcji
i określ, kiedy usunąć zadanie i zakończyć wszystkie powiązane z nim działania,
Wywołując funkcję
finishAndRemoveTask()
:
Kotlin
fun onRemoveFromOverview(view: View) { // It is good pratice to remove a document from the overview stack if not needed anymore. finishAndRemoveTask() }
Java
public void onRemoveFromRecents(View view) { // The document is no longer needed; remove its task. finishAndRemoveTask(); }
Zachowaj ukończone zadania
Jeśli chcesz zachować zadanie na ekranie Ostatnie, nawet jeśli związane z nim
zakończono,
FLAG_ACTIVITY_RETAIN_IN_RECENTS
flagę w
addFlags()
funkcji
który uruchamia działanie.
Kotlin
private fun newDocumentIntent() = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()) }
Java
private Intent newDocumentIntent() { final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()); return newDocumentIntent; }
Aby uzyskać ten sam efekt, ustaw parametr
Atrybut <activity>
android:autoRemoveFromRecents
do false
. Wartością domyślną jest true
w przypadku działań związanych z dokumentami i false
w przypadku
podczas ćwiczeń. Użycie tego atrybutu zastępuje
flaga FLAG_ACTIVITY_RETAIN_IN_RECENTS
.
Włączanie udostępniania ostatnich adresów URL (tylko Pixel)
Na urządzeniach Pixel z Androidem 12 lub nowszym użytkownicy mogą udostępniać linki do ostatnio oglądanych treści z internetu bezpośrednio na ekranie Najnowsze. Po wizycie zawartość aplikacji, użytkownik może przesunąć palcem do ekranu Ostatnie i znaleźć aplikację gdzie obejrzeli treści, a następnie kliknąć przycisk linku, aby skopiować lub udostępnić Adres URL.
W dowolnej aplikacji możesz włączyć link do ostatnich danych, podając interfejs internetowy oraz
zastępowanie
onProvideAssistContent()
jak w tym przykładzie:
Kotlin
class MainActivity : AppCompatActivity() { protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")) } }
Java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onProvideAssistContent(AssistContent outContent) { super.onProvideAssistContent(outContent); outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")); } }