Ekran Ostatnie

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:

Ekran Ostatnie z 2 Dyskiem Google a każdy z nich jest reprezentowany jako osobne zadanie.

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:

Ekran Ostatnie z Chrome i Gmailem uruchomione 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 ustawiania FLAG_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 i FLAG_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 i FLAG_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.

Ekran Ostatnie z linkiem do udostępnienia ostatnio oglądane w internecie treści.

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"));
    }
}