המסך 'אחרונים', שנקרא גם מסך הסקירה הכללית רשימה, או מסך האפליקציות האחרונות, הוא ממשק משתמש ברמת המערכת שמפרט את האפליקציות שניגשו אליהן לאחרונה פעילויות ומשימות. המשתמש יכול לנווט ברשימה, לבחור משימה כדי להמשיך או להסיר משימה מהרשימה על ידי החלקתה הצידה.
המסך 'אחרונים' משתמש בהתמקדות במסמך מודל – שהושק ב-Android 5.0 (API רמה 21) – שבה מספר מופעים של אותה פעילות שמכילה מסמכים שונים יכולה להופיע כמשימות מסך מהזמן האחרון. לדוגמה, ייתכן ש-Google Drive יציג משימה לכל אחד בכמה מסמכי Google. כל מסמך מופיע בתור משימה בדוח 'לאחרונה' screen:
דוגמה נפוצה נוספת היא כשמשתמש משתמש בדפדפן שלו והוא מקיש שיתוף > Gmail המסך אימייל חדש באפליקציית Gmail יופיע. הקשה על הלחצן 'לאחרונה' חושף את Chrome ו-Gmail שפועלים כנפרדים משימות:
בדרך כלל אתם מאפשרים למערכת להגדיר את המשימות והפעילויות שלכם שמיוצגים במסך 'אחרונים'. אין צורך לשנות את זה או התנהגות המשתמשים. עם זאת, האפליקציה יכולה לקבוע איך ומתי הפעילויות יופיעו מסך מהזמן האחרון.
ActivityManager.AppTask
מאפשר לכם לנהל משימות, ואת דגלי הפעילות
Intent
מאפשרת לכם לציין מתי
פעילות נוספת או מוסרת מהמסך 'אחרונים'. כמו כן,
<activity>
מאפשרים לכם להגדיר
את ההתנהגות במניפסט.
הוספת משימות למסך 'אחרונים'
שימוש בדגלים של הכיתה Intent
כדי
הוספת משימה נותנת לך שליטה רבה יותר על הזמן והאופן שבהם מסמך נפתח או
ייפתחו מחדש במסך 'אחרונים'. כשמשתמשים ב
<activity>
, אפשר
בחירה אם לפתוח תמיד את המסמך במשימה חדשה או להשתמש שוב במסמך קיים
עבור המסמך.
שימוש בדגל Intent כדי להוסיף משימה
כשיוצרים מסמך חדש לפעילות שלכם, קוראים אל
startActivity()
ומעבירים אליה את הכוונה שמפעילה את הפעילות. כדי להוסיף לוגיקה לוגית
הפסקה כדי שהמערכת תתייחס לפעילות שלך כמשימה חדשה ב'אחרונים'
מעבירים את
FLAG_ACTIVITY_NEW_DOCUMENT
סימון בaddFlags()
ה-method 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; } }
כשהפעילות העיקרית מתחילה פעילות חדשה, המערכת מחפשת באמצעות
משימות קיימות של אחד שהכוונה שלו תואמת לשם של רכיב Intent
של נתוני ה-Intent של הפעילות. אם המשימה לא נמצאה או של הכוונה שכלולה
FLAG_ACTIVITY_MULTIPLE_TASK
משימה חדשה נוצרת עם הפעילות הבסיסית שלה.
אם המערכת מוצאת משימה שהכוונה שלה תואמת לשם של רכיב Intent
של נתוני הכוונה, היא מציגה את המשימה בחזית ומעבירה את הכוונה החדשה
onNewIntent()
הפעילות החדשה מקבלת את הכוונה ויוצרת מסמך חדש בתפריט 'לאחרונה'
במסך, כמו בדוגמה הבאה:
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, והמסך 'אחרונים' מציגה משימה אחת עבור האפליקציה, והיא ממשיכה מכל פעילות ההפעלה האחרונה של המשתמש.
הסרת משימות
כברירת מחדל, המשימה במסמך יוצאת באופן אוטומטי מהמסך 'אחרונים'
בסיום הפעילות. אפשר לשנות את שיטת הפעולה הזאת באמצעות
ActivityManager.AppTask
עם דגל Intent
, או עם
מאפיין <activity>
.
כדי שמשימה מסוימת לא תופיע במסך 'אחרונים', תמיד אפשר לבחור
המאפיין <activity>
android:excludeFromRecents
אל true
.
אתם יכולים להגדיר את המספר המקסימלי של משימות שהאפליקציה יכולה לכלול
מפעיל לאחרונה את המסך על ידי הגדרת
מאפיין <activity>
android:maxRecents
אל
מספר שלם. כשמגיעים למספר המשימות המקסימלי,
המשימה הכי פחות בשימוש תיעלם מהמסך 'אחרונים'. ערך ברירת המחדל הוא 16,
והערך המקסימלי הוא 50 (25 במכשירים עם זיכרון נמוך). פחות ערך
מ-1 אינם חוקיים.
שימוש במחלקה AppTask כדי להסיר משימות
בפעילות שיוצרת משימה חדשה במסך 'פריטים אחרונים':
לציין מתי להסיר את המשימה ולסיים את כל הפעילויות שמשויכות אליה באמצעות
קוראים לפונקציה
finishAndRemoveTask()
method:
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")); } }