מסך 'פריטים אחרונים'

המסך 'אחרונים', שנקרא גם מסך הסקירה הכללית רשימה, או מסך האפליקציות האחרונות, הוא ממשק משתמש ברמת המערכת שמפרט את האפליקציות שניגשו אליהן לאחרונה פעילויות ומשימות. המשתמש יכול לנווט ברשימה, לבחור משימה כדי להמשיך או להסיר משימה מהרשימה על ידי החלקתה הצידה.

המסך 'אחרונים' משתמש בהתמקדות במסמך מודל – שהושק ב-Android 5.0 (API רמה 21) – שבה מספר מופעים של אותה פעילות שמכילה מסמכים שונים יכולה להופיע כמשימות מסך מהזמן האחרון. לדוגמה, ייתכן ש-Google Drive יציג משימה לכל אחד בכמה מסמכי Google. כל מסמך מופיע בתור משימה בדוח 'לאחרונה' screen:

המסך 'אחרונים' מציג שני כונן Google מסמכים, שכל אחד מהם מיוצג כמשימה נפרדת.

דוגמה נפוצה נוספת היא כשמשתמש משתמש בדפדפן שלו והוא מקיש שיתוף > Gmail המסך אימייל חדש באפליקציית Gmail יופיע. הקשה על הלחצן 'לאחרונה' חושף את Chrome ו-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"));
    }
}