Son kullanılanlar ekranı

Genel bakış ekranı, son görev listesi veya son uygulamalar ekranı olarak da adlandırılan Son Kullanılanlar 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 bir görevi 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 fazla ö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ında.

Yaygın bir başka örnek de kullanıcının tarayıcısını kullanırken Paylaş > Gmail'e dokunmasıdır. Gmail uygulamasının Oluştur ekranı görünür. Aynı anda Son Kullanılanlar düğmesine dokunursanız Chrome ve Gmail ayrı görevler olarak çalışır:

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

Normalde, sistemin Son Kullanılanlar ekranında görevlerinizin ve etkinliklerinizin nasıl temsil edildiğini tanımlamasına izin verirsiniz. Bu davranışı değiştirmeniz gerekmez. 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'te davranışı ayarlamanızı sağlar.

Son aramalar ekranına görev ekleme

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

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

Etkinliğiniz için yeni bir doküman oluşturduğunuzda startActivity() yöntemini çağırır ve bu yönteme, etkinliği başlatan amacı iletirsiniz. Sistemin, Son Kullanılanlar ekranında etkinliğinizi yeni bir görev olarak değerlendirmesini sağlayacak mantıksal bir ara eklemek için FLAG_ACTIVITY_NEW_DOCUMENT işaretini, etkinliği başlatan Intent özelliğinin addFlags() yöntemine iletin.

Yeni belgeyi 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çılmasına olanak tanır. Aşağıdaki kod, ana etkinliğin bunu nasıl yaptığını göstermektedir:

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şeninin 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çerirse etkinliğin kök olduğu 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 amacı onNewIntent() öğesine 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 Intent bayrağını kullanma bölümünde açıklandığı gibi, FLAG_ACTIVITY_NEW_DOCUMENT işaretinin FLAG_ACTIVITY_MULTIPLE_TASK işaretini etkinleştirmeden ayarlanmasıyla aynıdır.
always
Doküman açık olsa bile etkinlik, doküman için yeni bir görev oluşturur. Bu değeri kullanmak, hem FLAG_ACTIVITY_NEW_DOCUMENT hem de FLAG_ACTIVITY_MULTIPLE_TASK işaretinin 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 olduğu gibi değerlendirir. 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 ayarlandıysa 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 etkinliği tamamlandığında 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.

Bir görevi istediğiniz zaman Son aramalar ekranından tamamen hariç tutmak için <activity> özelliğini android:excludeFromRecents true olarak ayarlayabilirsiniz.

<activity> özelliğini android:maxRecents bir tam sayı değerine ayarlayarak uygulamanızın Son aramalar ekranına dahil edebileceği maksimum görev sayısını belirleyebilirsiniz. Maksimum görev sayısına ulaşıldığında, en son kullanılan görev Son Kullanılanlar ekranından kaybolur. Varsayılan değer 16 ve maksimum değer 50'dir (düşük bellekte 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 saklamak 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 Kullanılanlar ekranından paylaşabilirler. Kullanıcı, bir uygulamadaki içeriği ziyaret ettikten sonra Son kullanılanlar ekranına gidebilir 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şma bağlantısının bulunduğu Son Kullanılanlar ekranı.

Aşağıdaki örnekte gösterildiği gibi, tüm uygulamalar bir web kullanıcı arayüzü sağlayıp onProvideAssistContent() seçeneğini 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"));
    }
}