Son kullanılanlar ekranı

Genel Bakış ekranı olarak da adlandırılan Son Kullanılanlar ekranı, veya son uygulamalar ekranı, son zamanlarda erişilen uygulamaları listeleyen sistem düzeyinde bir kullanıcı arayüzüdür. aktiviteleri ve görevleri kapsar. Kullanıcı listede gezinebilir, bir görev seçerek bir görevi hızlıca kaydırıp listeden kaldırabilirsiniz.

Son Kullanılanlar ekranında doküman merkezli bir model - Android 5.0 (API) düzey 21) - bu durumda birden fazla farklı dokümanlar içeren aynı etkinlik, başka bir dokümandaki Son kullanılanlar ekranı. Örneğin, Google Drive'da Google dokümanıdır. Her doküman, Son Kullanılanlar'da bir görev olarak görünür ekran:

İki Google Drive'ın gösterildiği Son Kullanılanlar ekranı her biri ayrı bir görev olarak temsil edilir.

Sık karşılaşılan diğer bir örnek de kullanıcının tarayıcısını kullanması ve Paylaş > Gmail. Gmail uygulamasının Oluştur ekranı görünür. Ekrandaki O sıradaki Son Kullanılanlar düğmesi, Chrome ve Gmail'in ayrı olarak çalıştığını gösterir görevler:

Chrome ve Gmail'i gösteren Son Kullanılanlar ekranı yürütmeyi öğreteceğim.

Normalde, sistem tarafından görevlerinizin ve aktivitelerinizin nasıl ilerleyeceğini Son kullanılanlar ekranında gösterilir. Bu kimliği değiştirmeniz gerekmez. gösterir. Ancak uygulamanız, etkinliklerin Son kullanılanlar ekranı.

İlgili içeriği oluşturmak için kullanılan ActivityManager.AppTask sınıftaki görevleri yönetmenize olanak tanır. Ayrıca, Intent sınıfı, aşağıdaki durumlarda belirtmenizi sağlar: Etkinlik, Son Kullanılanlar ekranına eklenir veya ekrandan kaldırılır. Ayrıca, <activity> özellikleri, manifest'teki davranışı kontrol edin.

Son Kullanılanlar ekranına görev ekleme

Aşağıdaki işlemler için Intent sınıfının işaretlerini kullanma görev ekleme işlevi, bir dokümanın ne zaman ve nasıl açılacağı veya Son Kullanılanlar ekranında tekrar açıldı. <activity> özellikleri hakkında daha fazla bilgi dokümanı her zaman yeni bir görevde açma veya mevcut bir dokümanı yeniden kullanma arasında seçim yapabilirsiniz görevi görebilir.

Görev eklemek için Intent işaretini kullanma

Etkinliğiniz için yeni bir doküman oluşturduğunuzda startActivity() yöntemi, etkinliği başlatan niyeti iletir. Mantıksal bir Böylece sistem, etkinliğinizi Son Arananlar listesinde yeni bir görev olarak görür ekranın en altındaki FLAG_ACTIVITY_NEW_DOCUMENT addFlags()'te bayrakla Intent etkinliği'ne dokunun.

FLAG_ACTIVITY_MULTIPLE_TASK özelliğini ayarlarsanız yeni bir doküman oluşturduğunuzda sistem her zaman yeni bir hedef etkinliği seçin. Bu ayar, aynı dokümanın birden fazla görevde açılmış olabilir. Aşağıdaki kod, ana makinenin işlemi şunu yapıyor:

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 yeni bir etkinlik başlattığında amacı, amacı bileşeniyle eşleşen bir kullanıcı için mevcut görevleri . Görev bulunmazsa veya amacın içeriği FLAG_ACTIVITY_MULTIPLE_TASK işaretini kaldırırsanız etkinlik kökü olarak yeni bir görev oluşturulur.

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

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 kullanın

Bir etkinlik, manifest dosyasında her zaman yeni bir görevi <activity> kullanarak android:documentLaunchMode özelliğini gönderin. Bu özelliğin dört değeri vardır ve kullanıcı şu uygulamayı içeren bir doküman açar:

intoExisting
Etkinlik, doküman için mevcut bir görevi yeniden kullanıyor. Bu, FLAG_ACTIVITY_NEW_DOCUMENT şu ayarı olmadan işaretle: FLAG_ACTIVITY_MULTIPLE_TASK aşağıdaki adımları izleyin: Görev eklemek için Niyet işaretini kullanma bölümü.
always
Etkinlik, doküman için yeni bir görev oluşturur (doküman şu durumda olsa bile): açılmış. Bu değeri kullanmak, FLAG_ACTIVITY_NEW_DOCUMENT ve FLAG_ACTIVITY_MULTIPLE_TASK işaretleri.
none
Etkinlik, doküman için yeni bir görev oluşturmaz. Son Arananlar ekranı, etkinliği varsayılan olarak olduğu gibi ele alır. Tek bir görev gösteriyor kullanıcı tarafından çağrılan etkinlikten devam ettirilir.
never
Etkinlik, doküman için yeni bir görev oluşturmaz. Bu değerin ayarlanması şunun davranışını geçersiz kılar: FLAG_ACTIVITY_NEW_DOCUMENT FLAG_ACTIVITY_MULTIPLE_TASK işaretidir. Bunlardan biri intent'de ve Son Kullanılanlar ekranında ayarlanmışsa uygulama için tek bir görev görüntülediğinde, kullanıcının son çağrılması.
ziyaret edin.
'nı inceleyin.

Görevleri kaldırma

Varsayılan olarak bir doküman görevi Son Kullanılanlar ekranından otomatik olarak çıkar ve izlemesi gerektiğini belirtir. Bu davranışı ActivityManager.AppTask Intent bayrağı veya <activity> özelliği olabilir.

Bir görevi Son Kullanılanlar ekranından tamamen hariç tutmak için istediğiniz zaman <activity> özelliği android:excludeFromRecents kime: true.

Uygulamanızın dahil edebileceği maksimum görev sayısını Son Kullanılanlar ekranı <activity> özelliği android:maxRecents - tam sayı değeri. 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'dır. ve maksimum değer 50'dir (düşük bellekli cihazlarda 25). Daha az değer 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 şunları yapabilirsiniz: görevin ne zaman kaldırılacağını ve görevle ilişkili tüm faaliyetlerin ne zaman finishAndRemoveTask() yöntem:

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

Tamamlanmış görevleri tutma

Son kullanılanlar ekranında bir görevi tutmak isterseniz, onun yerine ve görevleri tamamlamak için FLAG_ACTIVITY_RETAIN_IN_RECENTS CANNOT TRANSLATE addFlags() yöntemi amacını belirtmelisiniz.

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ı efekti elde etmek için <activity> özelliği android:autoRemoveFromRecents false adlı yere. Varsayılan değer, doküman etkinlikleri için true ve doküman etkinlikleri için false değeridir düzenli aktiviteler. Bu özelliğin kullanılması, FLAG_ACTIVITY_RETAIN_IN_RECENTS işareti.

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

Android 12 veya sonraki sürümleri çalıştıran Pixel cihazlarda kullanıcılar bağlantı paylaşabilir son görüntülenen web içeriğine doğrudan Son Kullanılanlar ekranından erişebilirsiniz. Ziyaretten sonra Kullanıcı, Son Uygulamalar ekranına gidip uygulamayı bulabilir. daha sonra bağlantıyı kopyalamak veya paylaşmak için bağlantı düğmesine URL'yi tıklayın.

Paylaşılacak bağlantının olduğu Son Kullanılanlar ekranı son görüntülenen web içeriği.

Herhangi bir uygulama, kullanıcı arayüzü sağlayarak Son kullanılanlar bağlantısını etkinleştirebilir. geçersiz kılma onProvideAssistContent() aşağıdaki örnekte gösterildiği gibi:

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