شاشة "الأخيرة"، تسمى أيضًا شاشة "نظرة عامة"، مهمة حديثة أو شاشة التطبيقات الأخيرة، هي واجهة مستخدم على مستوى النظام تسرد الحسابات التي تم الوصول إليها مؤخرًا الأنشطة والمهام. يمكن للمستخدم التنقل من خلال القائمة وتحديد مهمة لاستئنافها أو إزالتها من القائمة من خلال تمريرها سريعًا للخارج.
تستخدم شاشة "التطبيقات الأخيرة" نظامًا يركز على المستند : تم طرحه في 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()
يحصل النشاط الجديد على الهدف وينشئ مستندًا جديدًا في "Recent" (الأحدث)
كما هو موضح في المثال التالي:
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
الأعلام. إذا تم ضبط أي من هذين الخيارين في intent، وستظهر شاشة "Recents" (الأحدث) مهمة واحدة للتطبيق، فإنه يستأنف من أي نشاط تم استدعاء آخر مرة.
إزالة المهام
بشكل تلقائي، تخرج مهمة المستند من شاشة "الأخيرة"
عند انتهاء نشاطه. يمكنك إلغاء هذا السلوك باستخدام
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 التي تعمل بالإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث، يمكن للمستخدمين مشاركة الروابط. إلى محتوى الويب الذي تم عرضه مؤخرًا مباشرةً من شاشة "العناصر الأخيرة". بعد الزيارة المحتوى في التطبيق، يمكن للمستخدم التمرير سريعًا إلى شاشة "الأخيرة" والعثور على التطبيق لعرض المحتوى، ثم النقر على زر الرابط لنسخ أو مشاركة عنوان 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")); } }