หน้าจอล่าสุด

หน้าจอ "ล่าสุด" หรือที่เรียกอีกอย่างว่า "หน้าจอภาพรวม" ซึ่งเป็นงานล่าสุด รายการ หรือหน้าจอแอปล่าสุด คือ UI ระดับระบบที่แสดงรายการที่เข้าถึงล่าสุด activities และ tasks ผู้ใช้สามารถไปยังส่วนต่างๆ ในรายการ แล้วเลือกงานที่จะ กลับมาทำงานอีกครั้ง หรือนำงานออกจากรายการด้วยการเลื่อนงานออกไป

หน้าจอ "ล่าสุด" ใช้เอกสารที่เน้นเอกสารเป็นหลัก รุ่น - เปิดตัวใน Android 5.0 (API ระดับ 21) ซึ่งมีหลายอินสแตนซ์ กิจกรรมเดียวกันที่มีเอกสารต่างกันจะปรากฏเป็นงานใน หน้าจอล่าสุด ตัวอย่างเช่น Google ไดรฟ์อาจมีงานสำหรับแต่ละ เอกสาร Google ได้หลายรายการ เอกสารแต่ละรายการจะปรากฏเป็นงานในส่วน "ล่าสุด" หน้าจอ:

หน้าจอ "ล่าสุด" แสดง Google ไดรฟ์ 2 รายการ เอกสาร โดยแต่ละฉบับแสดงเป็นงานแยกกัน

อีกตัวอย่างหนึ่งที่พบได้บ่อยคือเมื่อผู้ใช้ใช้เบราว์เซอร์และพวกเขาแตะ แชร์ > Gmail หน้าจอเขียนของแอป Gmail จะปรากฏขึ้น การแตะ ปุ่ม "ล่าสุด" ในขณะนั้นแสดงให้เห็นว่า Chrome และ Gmail กำลังทำงานแยกกัน งาน

หน้าจอ "ล่าสุด" ที่แสดง Chrome และ Gmail ให้ทำงานแยกกันได้

โดยปกติ คุณให้ระบบกำหนดวิธีทำงานและกิจกรรมของคุณ แสดงในหน้าจอ "ล่าสุด" คุณไม่จำเป็นต้องแก้ไข พฤติกรรมของคุณ อย่างไรก็ตาม แอปของคุณสามารถระบุได้ว่ากิจกรรมจะปรากฏในหน้าเว็บอย่างไรและเมื่อใด หน้าจอล่าสุด

ActivityManager.AppTask ช่วยให้คุณสามารถจัดการงาน และแฟล็กกิจกรรม Intent จะให้คุณระบุว่า ระบบจะเพิ่มหรือลบกิจกรรมออกจากหน้าจอ "ล่าสุด" นอกจากนี้ <activity> ให้คุณตั้งค่า ลักษณะการทำงานในไฟล์ Manifest

เพิ่มงานไปยังหน้าจอล่าสุด

การใช้แฟล็กของคลาส Intent เพื่อ เพิ่มงานทำให้คุณควบคุมเวลาและวิธีเปิดเอกสารได้มากขึ้น หรือ เปิดขึ้นอีกครั้งในหน้าจอ "ล่าสุด" เมื่อคุณใช้ <activity> คุณสามารถ คุณสามารถเลือกว่าจะเปิดเอกสารในงานใหม่หรือนำเอกสารที่มีอยู่มาใช้ซ้ำ งานสำหรับเอกสารนั้น

ใช้แฟล็ก Intent เพื่อเพิ่มงาน

เมื่อคุณสร้างเอกสารใหม่สำหรับกิจกรรม คุณจะเรียกใช้เมธอด startActivity() โดยส่งผ่านไปยัง Intent ที่เรียกใช้กิจกรรม หากต้องการแทรกตรรกะ เพื่อให้ระบบถือว่ากิจกรรมของคุณเป็นงานใหม่ในส่วน "ล่าสุด" ให้ส่งต่อ FLAG_ACTIVITY_NEW_DOCUMENT ธงในaddFlags() ของ Intent ที่เรียกใช้ กิจกรรม

หากคุณตั้งค่า FLAG_ACTIVITY_MULTIPLE_TASK ทำเครื่องหมายเมื่อคุณสร้างเอกสารใหม่ ระบบจะสร้างงานใหม่ด้วย กิจกรรมเป้าหมายเป็นราก การตั้งค่านี้จะทำให้เอกสารเดียวกัน เปิดในงานมากกว่า 1 รายการ โค้ดต่อไปนี้จะแสดงให้เห็นว่า กิจกรรมดังกล่าวจะทำดังต่อไปนี้

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 และ ข้อมูล Intent ของกิจกรรม หากไม่พบงานหรือ Intent ที่มีอยู่ FLAG_ACTIVITY_MULTIPLE_TASK แจ้งว่างานใหม่จะสร้างขึ้นโดยมีกิจกรรมนั้นเป็นราก

หากระบบพบงานที่ Intent ตรงกับชื่อคอมโพเนนต์ Intent และ ข้อมูลความตั้งใจจะนำงานนั้นมาแสดง และส่งต่อความตั้งใจใหม่ onNewIntent() กิจกรรมใหม่เข้าใจ Intent และสร้างเอกสารใหม่ในแท็บ "ล่าสุด" ดังที่ปรากฏในตัวอย่างต่อไปนี้

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);
}

ใช้แอตทริบิวต์กิจกรรมเพื่อเพิ่มงาน

กิจกรรมยังสามารถระบุในไฟล์ Manifest ได้ด้วยว่า กิจกรรมนั้นจะเปิดเป็น งานได้โดยใช้ <activity> android:documentLaunchMode แอตทริบิวต์นี้มี 4 ค่า ซึ่งจะมีผลต่อไปนี้เมื่อผู้ใช้ เปิดเอกสารด้วยแอปพลิเคชัน:

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() วิธีการ:

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() เมธอดของ Intent ที่จะเปิดกิจกรรม

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

หน้าจอ "ล่าสุด" พร้อมลิงก์สำหรับแชร์ เนื้อหาเว็บที่ดูล่าสุด

ทุกแอปสามารถเปิดใช้การลิงก์ "ล่าสุด" สำหรับผู้ใช้ได้โดยการให้ UI ของเว็บและ การลบล้าง 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"));
    }
}