หน้าจอ "ล่าสุด" หรือที่เรียกอีกอย่างว่า "หน้าจอภาพรวม" ซึ่งเป็นงานล่าสุด รายการ หรือหน้าจอแอปล่าสุด คือ UI ระดับระบบที่แสดงรายการที่เข้าถึงล่าสุด activities และ tasks ผู้ใช้สามารถไปยังส่วนต่างๆ ในรายการ แล้วเลือกงานที่จะ กลับมาทำงานอีกครั้ง หรือนำงานออกจากรายการด้วยการเลื่อนงานออกไป
หน้าจอ "ล่าสุด" ใช้เอกสารที่เน้นเอกสารเป็นหลัก รุ่น - เปิดตัวใน Android 5.0 (API ระดับ 21) ซึ่งมีหลายอินสแตนซ์ กิจกรรมเดียวกันที่มีเอกสารต่างกันจะปรากฏเป็นงานใน หน้าจอล่าสุด ตัวอย่างเช่น Google ไดรฟ์อาจมีงานสำหรับแต่ละ เอกสาร Google ได้หลายรายการ เอกสารแต่ละรายการจะปรากฏเป็นงานในส่วน "ล่าสุด" หน้าจอ:
อีกตัวอย่างหนึ่งที่พบได้บ่อยคือเมื่อผู้ใช้ใช้เบราว์เซอร์และพวกเขาแตะ แชร์ > Gmail หน้าจอเขียนของแอป 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")); } }