إن شاشة "العناصر الأخيرة" التي تُسمى أيضًا شاشة النظرة العامة، أو قائمة المهام الأخيرة، أو شاشة التطبيقات الأخيرة، هي واجهة مستخدم على مستوى النظام تسرد الأنشطة والمهام التي تم الوصول إليها مؤخرًا. يمكن للمستخدم التنقل عبر القائمة، أو تحديد مهمة لاستئنافها، أو إزالة مهمة من القائمة عن طريق تمريرها بعيدًا.
تستخدم شاشة "العناصر الأخيرة" نموذجًا يتمحور حول المستندات، تم طرحه في Android 5.0 (مستوى واجهة برمجة التطبيقات 21)، وفيه يمكن أن تظهر أمثلة متعددة من النشاط نفسه الذي يحتوي على مستندات مختلفة كمهام في شاشة "الأخيرة". على سبيل المثال، قد يكون لدى Google Drive مهمة لكل مستند من مستندات Google المتعددة. تظهر كل مستند كمهمة في شاشة "الأحدث":
من الأمثلة الشائعة الأخرى عندما يستخدم المستخدم المتصفّح وينقر على مشاركة > Gmail. ستظهر شاشة الإنشاء لتطبيق Gmail. يؤدي النقر على زر "الأماكن الأخيرة" في هذا الوقت إلى الكشف عن تشغيل Chrome وGmail كمهام منفصلة:
عادةً، تسمح للنظام بتحديد كيفية تمثيل مهامك وأنشطتك في شاشة "العناصر الأخيرة". لا تحتاج إلى تعديل هذا السلوك. ومع ذلك، يمكن لتطبيقك تحديد كيفية ظهور الأنشطة في شاشة "الأخيرة" ووقت ظهورها.
تتيح لك الفئة
ActivityManager.AppTask
إدارة المهام، وتتيح لك علامات النشاط لفئة
Intent
إمكانية تحديد وقت
إضافة نشاط أو إزالته من شاشة "العناصر الأخيرة". بالإضافة إلى ذلك، تتيح لك سمات <activity>
ضبط السلوك في البيان.
إضافة مهام إلى شاشة "الأماكن الأخيرة"
يمنحك استخدام علامات الفئة Intent
لإضافة مهمة تحكمًا أكبر في وقت وكيفية فتح مستند أو إعادة فتحه في شاشة "العناصر الأخيرة". عند استخدام السمات <activity>
، يمكنك الاختيار بين فتح المستند دائمًا في مهمة جديدة أو إعادة استخدام مهمة حالية للمستند.
استخدام علامة Intent لإضافة مهمة
عند إنشاء مستند جديد لنشاطك، عليك استدعاء الطريقة
startActivity()
،
وتمرير الهدف الذي يُطلق النشاط إليه. لإدراج فاصل منطقي حتى يتعامل النظام مع نشاطك كمهمة جديدة في شاشة "العناصر الأخيرة"، مرِّر العلامة FLAG_ACTIVITY_NEW_DOCUMENT
في طريقة addFlags()
ضمن طريقة Intent
التي تبدأ النشاط.
إذا وضعت العلامة FLAG_ACTIVITY_MULTIPLE_TASK
عند إنشاء المستند الجديد، سينشئ النظام دائمًا مهمة جديدة باستخدام النشاط الهدف كجذر. يتيح هذا الإعداد فتح نفس
المستند في أكثر من مهمة واحدة. توضح التعليمة البرمجية التالية كيف يقوم
النشاط الرئيسي بذلك:
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; } }
عندما يبدأ النشاط الرئيسي نشاطًا جديدًا، يبحث النظام في المهام الحالية للشخص الذي يتطابق غرضه مع اسم المكوِّن والهدف من النشاط. إذا لم يتم العثور على المهمة أو تضمّن الغرض علامة FLAG_ACTIVITY_MULTIPLE_TASK
، يتم إنشاء مهمة جديدة يكون النشاط هو جذرها.
وإذا عثر النظام على مهمة يتطابق الغرض منها مع اسم مكوّن الغرض
وبيانات الغرض، سيدرج هذه المهمة في المقدمة ويمرر الهدف الجديد إلى
onNewIntent()
.
يحصل النشاط الجديد على النية وينشئ مستندًا جديدًا في شاشة "Recents" (الأحدث)، كما هو موضح في المثال التالي:
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); }
استخدام سمة النشاط لإضافة مهمة
يمكن أيضًا أن يشير النشاط في ملف البيان الخاص به إلى أنّه يبدأ دائمًا في العمل على مهمة جديدة باستخدام السمة <activity>
android:documentLaunchMode
.
تتضمن هذه السمة أربع قيم، ما ينتج عنها التأثيرات التالية عندما يفتح المستخدم مستندًا يحتوي على التطبيق:
intoExisting
- يعيد النشاط استخدام مهمة حالية للمستند. يماثل هذا ضبط العلامة
FLAG_ACTIVITY_NEW_DOCUMENT
بدون ضبط العلامةFLAG_ACTIVITY_MULTIPLE_TASK
على النحو الموضّح في القسم استخدام علامة Intent لإضافة مهمة. always
- ينشئ النشاط مهمة جديدة للمستند، حتى إذا كان المستند مفتوحًا. وتُستخدم هذه القيمة، تمامًا كإعداد كل من
علامتَي
FLAG_ACTIVITY_NEW_DOCUMENT
وFLAG_ACTIVITY_MULTIPLE_TASK
. none
- لا يؤدي النشاط إلى إنشاء مهمة جديدة للمستند. تتعامل شاشة "الأماكن الأخيرة" مع النشاط كما تفعل بشكل افتراضي. ويعرض مهمة واحدة للتطبيق يتم استئنافها من أي نشاط استدعى المستخدم آخر مرة.
never
- لا يؤدي النشاط إلى إنشاء مهمة جديدة للمستند. يؤدي ضبط هذه القيمة إلى إلغاء سلوك العلامتين
FLAG_ACTIVITY_NEW_DOCUMENT
وFLAG_ACTIVITY_MULTIPLE_TASK
. فإذا تم تعيين أي منهما في الغرض، وعرضت شاشة "العناصر الأخيرة" مهمة واحدة للتطبيق، يتم استئنافها من أي نشاط استدعى المستخدم آخر مرة.
إزالة المهام
بشكل افتراضي، يتم الخروج من مهمة المستند تلقائيًا من شاشة "العناصر الأخيرة"
عند انتهاء نشاطها. يمكنك إلغاء هذا السلوك باستخدام الفئة
ActivityManager.AppTask
من خلال وضع علامة Intent
أو باستخدام
السمة <activity>
.
يمكنك دائمًا استبعاد مهمة من شاشة "العناصر الأخيرة" بالكامل من خلال ضبط
سمة <activity>
android:excludeFromRecents
على true
.
يمكنك ضبط الحدّ الأقصى لعدد المهام التي يمكن لتطبيقك تضمينها في
شاشة "الأخيرة" عن طريق ضبط
السمة <activity>
android:maxRecents
على
قيمة عدد صحيح. عند الوصول إلى الحد الأقصى لعدد المهام، تختفي
المهمة الأقل استخدامًا مؤخرًا من شاشة "العناصر الأخيرة". القيمة الافتراضية هي 16، والحد الأقصى للقيمة هو 50 (25 على الأجهزة ذات الذاكرة المنخفضة). القيم الأقل من 1 غير صالحة.
استخدام فئة AppTask لإزالة المهام
في النشاط الذي ينشئ مهمة جديدة في شاشة "العناصر الأخيرة"، يمكنك
تحديد وقت إزالة المهمة وإنهاء جميع الأنشطة المرتبطة بها من خلال
استدعاء الطريقة
finishAndRemoveTask()
:
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(); }
الاحتفاظ بالمهام المكتملة
إذا أردت الاحتفاظ بمهمة في شاشة "العناصر الأخيرة"، حتى إذا كان نشاطها قد
انتهى، ضَع علامة
FLAG_ACTIVITY_RETAIN_IN_RECENTS
في طريقة
addFlags()
للهدف الذي يؤدي إلى بدء النشاط.
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; }
لتحقيق التأثير نفسه، اضبط
السمة
<activity>
android:autoRemoveFromRecents
على false
. القيمة التلقائية هي true
لأنشطة المستندات وfalse
للأنشطة العادية. يؤدي استخدام هذه السمة إلى إلغاء
العلامة FLAG_ACTIVITY_RETAIN_IN_RECENTS
.
تفعيل مشاركة عناوين URL الحديثة (على هواتف Pixel فقط)
على أجهزة Pixel التي تعمل بنظام التشغيل Android 12 أو إصدار أحدث، يمكن للمستخدمين مشاركة روابط مؤدية إلى محتوى الويب الذي تم الاطّلاع عليه مؤخرًا مباشرةً من شاشة "العناصر الأخيرة". بعد الانتقال إلى المحتوى في أحد التطبيقات، يمكن للمستخدم التمرير سريعًا إلى شاشة "العناصر الأخيرة" والعثور على التطبيق الذي شاهد المحتوى فيه، ثم النقر على زر الرابط لنسخ عنوان URL أو مشاركته.
يمكن لأي تطبيق تفعيل ربط "العناصر الأخيرة" للمستخدمين من خلال توفير واجهة مستخدم على الويب وتجاهل
onProvideAssistContent()
،
كما هو موضّح في المثال التالي:
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")); } }