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:
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:
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şaretiniFLAG_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
veFLAG_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
veFLAG_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.
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")); } }