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