Son kullanılanlar ekranı

Genel Bakış ekranı, son görev listesi veya son uygulamalar ekranı olarak da adlandırılan Son Uygulamalar ekranı, son erişilen etkinlikleri ve görevleri listeleyen sistem düzeyinde bir kullanıcı arayüzüdür. Kullanıcı listede gezinebilir, devam ettirmek için bir görev seçebilir veya hızlıca kaydırarak listeden kaldırabilir.

Son Kullanılanlar ekranı, Android 5.0'da (API düzeyi 21) kullanıma sunulan doküman merkezli bir model kullanır. Bu modelde, aynı etkinliğin farklı dokümanlar içeren birden çok örneği, Son Kullanılanlar ekranında görev olarak görünebilir. Örneğin, Google Drive'da çeşitli Google dokümanlarından her biri için bir görev olabilir. Her doküman, Son Kullanılanlar ekranında bir görev olarak görünür:

Her biri ayrı bir görev olarak temsil edilen iki Google Drive dokümanının gösterildiği Son Öğeler ekranı.

Yaygın bir diğer örnek de kullanıcının tarayıcısını kullanması ve Paylaş > Gmail'e dokunmasıdır. Gmail uygulamasının E-posta Yaz ekranı görünür. Bu sırada Son Kullanılanlar düğmesine dokunduğunuzda Chrome ve Gmail ayrı görevler olarak çalışır:

Chrome ve Gmail'in ayrı görevler olarak çalıştığını gösteren Son Öğeler ekranı.

Normalde, görevlerinizin ve etkinliklerinizin Son Kullanılanlar ekranında nasıl temsil edileceğini sistemin tanımlamasına izin verirsiniz. Bu davranışı değiştirmenize gerek yoktur. Ancak uygulamanız, Son Kullanılanlar ekranında etkinliklerin nasıl ve ne zaman görüneceğini belirleyebilir.

ActivityManager.AppTask sınıfı görevleri yönetmenizi, Intent sınıfının etkinlik işaretleri ise Son Kullanılanlar ekranından bir etkinliğin ne zaman ekleneceğini veya kaldırılacağını belirtmenizi sağlar. Ayrıca <activity> özellikleri, manifest dosyasındaki davranışı ayarlayabilmenizi sağlar.

Son aramalar ekranına görev ekleme

Görev eklemek için Intent sınıfının işaretlerini kullanmak, bir dokümanın ne zaman ve nasıl açılacağı konusunda daha fazla kontrol sahibi olmanızı sağlar. <activity> özelliklerini kullanırken, belgeyi her zaman yeni bir görevde açma veya doküman için mevcut bir görevi yeniden kullanma arasında seçim yapabilirsiniz.

Görev eklemek için Intent işaretini kullanın

Etkinliğiniz için yeni bir belge oluşturduğunuzda startActivity() yöntemini çağırarak ona etkinliği başlatan niyeti iletirsiniz. Sistemin, etkinliğinizi Son Kullanılanlar ekranında yeni bir görev olarak işlemesi amacıyla mantıksal bir ara eklemek için etkinliği başlatan Intent öğesinin addFlags() yöntemindeki FLAG_ACTIVITY_NEW_DOCUMENT işaretini iletin.

Yeni dokümanı oluştururken FLAG_ACTIVITY_MULTIPLE_TASK işaretini ayarlarsanız sistem her zaman hedef etkinliği kök olarak içeren yeni bir görev oluşturur. Bu ayar, aynı dokümanın birden fazla görevde açılabilmesini sağlar. Aşağıdaki kod, ana etkinliğin bunu nasıl yaptığını gösterir:

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

}

Ana etkinlik yeni bir etkinlik başlattığında sistem, amacı amaç bileşeni adı ve etkinliğin amaç verileriyle eşleşen bir görev için mevcut görevleri arar. Görev bulunmazsa veya amaç FLAG_ACTIVITY_MULTIPLE_TASK işaretini içeriyorsa kök etkinlik olan yeni bir görev oluşturulur.

Sistem, amacı amaç bileşeni adı ve amaç verileriyle eşleşen bir görev bulursa bu görevi öne getirir ve yeni niyeti onNewIntent()'e iletir. Yeni etkinlik, amacı alır ve aşağıdaki örnekte gösterildiği gibi Son Kullanılanlar ekranında yeni bir doküman oluşturur:

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

Görev eklemek için etkinlik özelliğini kullanma

Ayrıca bir etkinlik, manifest dosyasında <activity> özelliğini android:documentLaunchMode kullanarak her zaman yeni bir göreve başlattığını da belirtebilir. Bu özelliğin dört değeri vardır. Bu değerler, kullanıcı uygulamayla bir dokümanı açtığında aşağıdaki etkileri oluşturur:

intoExisting
Etkinlik, doküman için mevcut bir görevi yeniden kullanır. Bu, Bir görev eklemek için Amaç işaretini kullanma bölümünde açıklandığı gibi, FLAG_ACTIVITY_NEW_DOCUMENT işaretini FLAG_ACTIVITY_MULTIPLE_TASK işareti olmadan ayarlamakla aynıdır.
always
Doküman, açık olsa bile etkinlik için yeni bir görev oluşturur. Bu değeri kullanmak, FLAG_ACTIVITY_NEW_DOCUMENT ve FLAG_ACTIVITY_MULTIPLE_TASK işaretlerinin ayarlanmasıyla aynıdır.
none
Etkinlik, doküman için yeni bir görev oluşturmuyor. Son Kullanılanlar ekranı, etkinliği varsayılan olarak işleme alır. Uygulama için kullanıcının en son çağırdığı etkinlikten devam eden tek bir görev görüntüler.
never
Etkinlik, doküman için yeni bir görev oluşturmuyor. Bu değerin ayarlanması, FLAG_ACTIVITY_NEW_DOCUMENT ve FLAG_ACTIVITY_MULTIPLE_TASK işaretlerinin davranışını geçersiz kılar. Amaçta bunlardan biri ayarlanmışsa ve Son Kullanılanlar ekranında uygulama için tek bir görev görüntülenirse görev, kullanıcının en son çağırdığı etkinlikten devam eder.

Görevleri kaldırma

Varsayılan olarak, bir doküman görevi sona erdiğinde, Son Kullanılanlar ekranından otomatik olarak çıkar. Bu davranışı ActivityManager.AppTask sınıfı, Intent işareti veya <activity> özelliği ile geçersiz kılabilirsiniz.

İstediğiniz zaman <activity> özelliğini android:excludeFromRecents true değerine ayarlayarak bir görevi Son Kullanılanlar ekranından tamamen hariç tutabilirsiniz.

Uygulamanızın Son Kullanılanlar ekranında dahil edebileceği maksimum görev sayısını, <activity> özelliğini android:maxRecents bir tam sayı değerine ayarlayarak ayarlayabilirsiniz. Maksimum görev sayısına ulaşıldığında, son kullanılan görev Son Kullanılanlar ekranından kaybolur. Varsayılan değer 16, maksimum değer ise 50'dir (düşük belleğe sahip cihazlarda 25). 1'den küçük değerler geçerli değildir.

Görevleri kaldırmak için AppTask sınıfını kullanma

Son Kullanılanlar ekranında yeni bir görev oluşturan etkinlikte, finishAndRemoveTask() yöntemini çağırarak görevin ne zaman kaldırılacağını ve görevle ilişkili tüm etkinlikleri ne zaman bitireceğinizi belirtebilirsiniz:

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

Tamamlanan görevleri saklama

Son kullanılanlar ekranındaki bir görevi, etkinliği sona ermiş olsa bile tutmak istiyorsanız etkinliği başlatan amacın addFlags() yöntemindeki FLAG_ACTIVITY_RETAIN_IN_RECENTS işaretini iletin.

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

Aynı etkiyi elde etmek için <activity> özelliğini android:autoRemoveFromRecents false olarak ayarlayın. Varsayılan değer, doküman etkinlikleri için true ve normal etkinlikler için false'dir. Bu özelliğin kullanılması FLAG_ACTIVITY_RETAIN_IN_RECENTS işaretini geçersiz kılar.

Son kullanılanlar URL paylaşımını etkinleştirme (yalnızca Pixel)

Android 12 veya sonraki sürümleri çalıştıran Pixel cihazlarda kullanıcılar, son görüntülenen web içeriklerinin bağlantılarını doğrudan Son Arananlar ekranından paylaşabilirler. Kullanıcı, bir uygulamadaki içeriği ziyaret ettikten sonra Son Arananlar ekranına ilerleyebilir ve içeriği görüntülediği uygulamayı bulabilir, ardından URL'yi kopyalamak veya paylaşmak için bağlantı düğmesine dokunabilir.

Son görüntülenen web içeriğini paylaşmak için bir bağlantının yer aldığı Son Kullanılanlar ekranı.

Aşağıdaki örnekte gösterildiği gibi, tüm uygulamalar web kullanıcı arayüzü sağlayıp onProvideAssistContent() değerini geçersiz kılarak kullanıcılar için Son Kullanılanlar bağlantısını etkinleştirebilir:

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