صفحه اخیر که به آن صفحه نمای کلی، لیست وظایف اخیر یا صفحه برنامه های اخیر نیز گفته می شود، یک رابط کاربری در سطح سیستم است که فعالیت ها و کارهایی را که اخیراً به آنها دسترسی داشته اید فهرست می کند. کاربر می تواند در لیست پیمایش کند، یک کار را برای از سرگیری انتخاب کند، یا با کشیدن آن به سمت کنار، آن را از لیست حذف کند.
صفحه Recents از یک مدل سندمحور استفاده می کند - که در Android 5.0 (سطح API 21) معرفی شده است - که در آن چندین نمونه از یک فعالیت یکسان حاوی اسناد مختلف می توانند به عنوان وظایف در صفحه Recents ظاهر شوند. به عنوان مثال، Google Drive ممکن است برای هر یک از چندین سند Google وظیفه ای داشته باشد. هر سند به عنوان یک کار در صفحه Recents ظاهر می شود:
مثال رایج دیگر زمانی است که کاربر از مرورگر خود استفاده میکند و روی Share > Gmail ضربه میزند. صفحه نوشتن برنامه Gmail ظاهر می شود. با ضربه زدن روی دکمه Recents در آن زمان، Chrome و Gmail در حال اجرا به عنوان وظایف جداگانه هستند:
به طور معمول، به سیستم اجازه میدهید نحوه نمایش وظایف و فعالیتهای شما را در صفحه اخیراً مشخص کند. شما نیازی به اصلاح این رفتار ندارید. با این حال، برنامه شما میتواند تعیین کند که چگونه و چه زمانی فعالیتها در صفحه اخیر ظاهر میشوند.
کلاس ActivityManager.AppTask
به شما امکان می دهد وظایف را مدیریت کنید، و پرچم های فعالیت کلاس Intent
به شما امکان می دهد مشخص کنید که یک فعالیت چه زمانی از صفحه Recents اضافه یا حذف شود. همچنین، ویژگیهای <activity>
به شما امکان میدهند رفتار را در مانیفست تنظیم کنید.
کارها را به صفحه اخیر اضافه کنید
استفاده از پرچمهای کلاس Intent
برای افزودن یک کار به شما کنترل بیشتری روی زمان و نحوه باز شدن یا بازگشایی یک سند در صفحه Recents میدهد. وقتی از ویژگیهای <activity>
استفاده میکنید، میتوانید بین همیشه باز کردن سند در یک کار جدید یا استفاده مجدد از یک کار موجود برای سند یکی را انتخاب کنید.
از پرچم Intent برای اضافه کردن یک کار استفاده کنید
هنگامی که یک سند جدید برای اکتیویتی خود ایجاد می کنید، متد startActivity()
را فراخوانی می کنید و هدفی را که فعالیت را راه اندازی می کند به آن منتقل می کنید. برای درج یک شکست منطقی به طوری که سیستم با فعالیت شما به عنوان یک کار جدید در صفحه Recents رفتار کند، پرچم FLAG_ACTIVITY_NEW_DOCUMENT
را در متد addFlags()
در Intent
که فعالیت را راه اندازی می کند، ارسال کنید.
اگر هنگام ایجاد سند جدید، پرچم FLAG_ACTIVITY_MULTIPLE_TASK
را تنظیم کنید، سیستم همیشه یک کار جدید با فعالیت هدف به عنوان ریشه ایجاد می کند. این تنظیم به یک سند اجازه می دهد تا در بیش از یک کار باز شود. کد زیر نشان می دهد که چگونه اکتیویتی اصلی این کار را انجام می دهد:
کاتلین
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++) }
جاوا
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
بود، یک کار جدید با فعالیت به عنوان ریشه آن ایجاد میشود.
اگر سیستم وظیفه ای را پیدا کند که هدف آن با نام مولفه intent و داده های intent مطابقت داشته باشد، آن وظیفه را به جلو می آورد و intent جدید را به onNewIntent()
ارسال می کند. فعالیت جدید هدف را دریافت می کند و یک سند جدید در صفحه Recents ایجاد می کند، همانطور که در مثال زیر نشان داده شده است:
کاتلین
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) }
جاوا
@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
است، همانطور که در بخش استفاده از پرچم قصد برای افزودن یک کار توضیح داده شده است. -
always
- فعالیت یک کار جدید برای سند ایجاد می کند، حتی اگر سند قبلاً باز شده باشد. استفاده از این مقدار همانند تنظیم پرچمهای
FLAG_ACTIVITY_NEW_DOCUMENT
وFLAG_ACTIVITY_MULTIPLE_TASK
است. -
none
- فعالیت کار جدیدی برای سند ایجاد نمی کند. صفحه Recents با فعالیت به صورت پیش فرض رفتار می کند. این یک کار واحد را برای برنامه نمایش می دهد، که از هر فعالیتی که کاربر آخرین بار فراخوانده است، از سر گرفته می شود.
-
never
- فعالیت کار جدیدی برای سند ایجاد نمی کند. تنظیم این مقدار رفتار پرچمهای
FLAG_ACTIVITY_NEW_DOCUMENT
وFLAG_ACTIVITY_MULTIPLE_TASK
را لغو میکند. اگر هر یک از اینها در intent تنظیم شده باشد و صفحه Recents یک وظیفه را برای برنامه نمایش دهد، از هر فعالیتی که کاربر آخرین بار فراخوانده است از سر گرفته می شود.
وظایف را حذف کنید
به طور پیشفرض، پس از پایان فعالیت، یک کار سند بهطور خودکار از صفحه اخیراً خارج میشود. می توانید این رفتار را با کلاس ActivityManager.AppTask
، با یک پرچم Intent
یا با ویژگی <activity>
لغو کنید.
همیشه میتوانید با تنظیم ویژگی <activity>
android:excludeFromRecents
روی true
، یک کار را از صفحه Recents حذف کنید.
با تنظیم ویژگی <activity>
android:maxRecents
به یک مقدار صحیح، میتوانید حداکثر تعداد کارهایی را که برنامه شما میتواند در صفحه Recents شامل شود، تنظیم کنید. وقتی به حداکثر تعداد کارها رسیدید، کار اخیراً کمتر استفاده شده از صفحه نمایش اخیر ناپدید می شود. پیش فرض 16 و حداکثر مقدار 50 است (25 در دستگاه های با حافظه کم). مقادیر کمتر از 1 معتبر نیستند.
از کلاس AppTask برای حذف وظایف استفاده کنید
در اکتیویتی که یک کار جدید در صفحه Recents ایجاد میکند، میتوانید با فراخوانی متد finishAndRemoveTask()
تعیین کنید که چه زمانی آن کار حذف شود و تمام فعالیتهای مرتبط با آن تمام شود:
کاتلین
fun onRemoveFromOverview(view: View) { // It is good pratice to remove a document from the overview stack if not needed anymore. finishAndRemoveTask() }
جاوا
public void onRemoveFromRecents(View view) { // The document is no longer needed; remove its task. finishAndRemoveTask(); }
کارهای تمام شده را حفظ کنید
اگر میخواهید یک کار را در صفحه Recents حفظ کنید، حتی اگر فعالیت آن تمام شده باشد، پرچم FLAG_ACTIVITY_RETAIN_IN_RECENTS
را در متد addFlags()
هدفی که فعالیت را راهاندازی میکند، ارسال کنید.
کاتلین
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()) }
جاوا
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 یا بالاتر، کاربران میتوانند پیوندهای محتوای وب را که اخیراً مشاهده کردهاند را مستقیماً از صفحه نمایش اخیر به اشتراک بگذارند. پس از بازدید از محتوای یک برنامه، کاربر می تواند به صفحه Recents بکشد و برنامه ای را که در آن محتوا را مشاهده کرده است بیابد، سپس روی دکمه پیوند ضربه بزنید تا URL را کپی یا به اشتراک بگذارید.
همانطور که در مثال زیر نشان داده شده است، هر برنامهای میتواند با ارائه یک رابط کاربری وب و نادیده گرفتن onProvideAssistContent()
، پیوند Recents را برای کاربران فعال کند:
کاتلین
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")) } }
جاوا
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")); } }