Màn hình Gần đây

Màn hình Gần đây, còn được gọi là màn hình Overview (Tổng quan), công việc gần đây list (Màn hình ứng dụng gần đây) là giao diện người dùng cấp hệ thống liệt kê các ứng dụng đã truy cập gần đây hoạt độngcông việc. Người dùng có thể di chuyển qua danh sách, chọn một tác vụ để tiếp tục hoặc xoá một công việc khỏi danh sách bằng cách vuốt công việc sang bên.

Màn hình Gần đây sử dụng giao diện tập trung vào tài liệu mô hình—được giới thiệu trong Android 5.0 (API cấp 21), trong đó nhiều phiên bản của cùng một hoạt động chứa các tài liệu khác nhau có thể xuất hiện dưới dạng công việc trong Màn hình Gần đây. Ví dụ: Google Drive có thể có một tác vụ cho từng một số tài liệu Google. Mỗi tài liệu sẽ xuất hiện dưới dạng một nhiệm vụ trong trang Gần đây màn hình:

Màn hình Gần đây cho thấy hai tệp Google Drive tài liệu, mỗi tài liệu được trình bày dưới dạng một công việc riêng biệt.

Một ví dụ phổ biến khác là khi người dùng đang sử dụng trình duyệt và họ nhấn vào Chia sẻ > Gmail. Màn hình Soạn thư của ứng dụng Gmail xuất hiện. Nhấn vào Tại thời điểm đó, nút Gần đây cho thấy Chrome và Gmail hoạt động dưới dạng các hoạt động riêng biệt nhiệm vụ:

Màn hình Gần đây hiển thị Chrome và Gmail chạy dưới dạng các tác vụ riêng biệt.

Thông thường, bạn để hệ thống xác định các nhiệm vụ và hoạt động của bạn được thể hiện trên màn hình Gần đây. Bạn không cần sửa đổi chế độ này hành vi. Tuy nhiên, ứng dụng của bạn có thể xác định cách thức và thời điểm các hoạt động xuất hiện trong Màn hình Gần đây.

Chiến lược phát hành đĩa đơn ActivityManager.AppTask cho phép bạn quản lý các tác vụ và cờ hoạt động của Intent cho phép bạn chỉ định thời điểm hoạt động sẽ được thêm hoặc bị xoá khỏi màn hình Gần đây. Ngoài ra, Thuộc tính <activity> cho phép bạn đặt hành vi trong tệp kê khai.

Thêm việc cần làm vào màn hình Gần đây

Sử dụng cờ của lớp Intent để tính năng thêm nhiệm vụ giúp bạn kiểm soát tốt hơn thời điểm và cách thức mở tài liệu, hoặc đã mở lại trong màn hình Gần đây. Khi bạn sử dụng <activity>, bạn có thể chọn giữa luôn mở tài liệu trong một tác vụ mới hoặc sử dụng lại một tài liệu hiện có công việc cho tài liệu.

Sử dụng cờ Ý định để thêm một công việc

Khi tạo một tài liệu mới cho hoạt động của mình, bạn gọi hàm startActivity() phương thức, truyền vào đó ý định khởi chạy hoạt động. Để chèn một hàm logic ngắt để hệ thống coi hoạt động của bạn là một tác vụ mới trong danh sách Gần đây hãy truyền FLAG_ACTIVITY_NEW_DOCUMENT gắn cờ trong addFlags() của Intent để khởi chạy của bạn.

Nếu bạn đặt FLAG_ACTIVITY_MULTIPLE_TASK gắn cờ khi bạn tạo tài liệu mới, hệ thống sẽ luôn tạo tác vụ mới bằng hoạt động mục tiêu làm gốc. Cài đặt này cho phép cùng một tài liệu đã mở trong nhiều tác vụ. Mã sau đây minh hoạ cách hoạt động sẽ thực hiện việc này:

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

}

Khi hoạt động chính khởi chạy một hoạt động mới, hệ thống sẽ tìm kiếm các tác vụ hiện có cho một tác vụ có ý định khớp với tên thành phần ý định và dữ liệu ý định cho hoạt động. Nếu không tìm thấy tác vụ hoặc ý định có chứa ý định FLAG_ACTIVITY_MULTIPLE_TASK cờ, một tác vụ mới sẽ được tạo với hoạt động là hoạt động gốc.

Nếu hệ thống tìm thấy một tác vụ có ý định khớp với tên thành phần ý định và dữ liệu ý định, nó sẽ đưa tác vụ đó lên trước và truyền ý định mới đến onNewIntent(). Hoạt động mới nhận ý định và tạo một tài liệu mới trong ứng dụng Gần đây như trong ví dụ sau:

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

Sử dụng thuộc tính hoạt động để thêm một việc cần làm

Một hoạt động cũng có thể chỉ định trong tệp kê khai rằng hoạt động đó luôn khởi chạy trong một công việc bằng cách sử dụng <activity> android:documentLaunchMode. Thuộc tính này có bốn giá trị tạo ra các hiệu ứng sau đây khi người dùng mở một tài liệu có ứng dụng:

intoExisting
Hoạt động sử dụng lại một tác vụ hiện có cho tài liệu. Việc này cũng giống như đặt FLAG_ACTIVITY_NEW_DOCUMENT gắn cờ mà không đặt giá trị FLAG_ACTIVITY_MULTIPLE_TASK như được mô tả trong Sử dụng cờ Ý định để thêm một phần công việc.
always
Hoạt động tạo ra một tác vụ mới cho tài liệu, ngay cả khi tài liệu đã mở. Việc sử dụng giá trị này cũng giống như đặt cả Cờ FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK.
none
Hoạt động không tạo ra tác vụ mới cho tài liệu. Danh sách "Gần đây" màn hình sẽ xử lý hoạt động theo mặc định. Mục này cho thấy một nhiệm vụ duy nhất cho ứng dụng, sẽ tiếp tục từ bất kỳ hoạt động nào mà người dùng đã gọi sau cùng.
never
Hoạt động không tạo ra tác vụ mới cho tài liệu. Đặt giá trị này ghi đè hành vi của FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK cờ. Nếu một trong hai yếu tố này được đặt trong ý định và màn hình Gần đây hiển thị một tác vụ duy nhất cho ứng dụng, nó sẽ tiếp tục từ bất kỳ hoạt động nào người dùng đã gọi gần đây nhất.

Xóa công việc

Theo mặc định, một tác vụ tài liệu sẽ tự động thoát khỏi màn hình Gần đây khi hoạt động của ứng dụng kết thúc. Bạn có thể ghi đè hành vi này bằng ActivityManager.AppTask có cờ Intent hoặc thuộc tính <activity>.

Bạn luôn có thể loại trừ hoàn toàn một công việc khỏi màn hình Gần đây bằng cách đặt thuộc tính <activity> android:excludeFromRecents đến true.

Bạn có thể đặt số lượng công việc tối đa mà ứng dụng có thể đưa vào Màn hình Gần đây bằng cách đặt Thuộc tính <activity> android:maxRecents với một giá trị số nguyên. Khi đạt đến số lượng công việc tối đa, tác vụ được dùng gần đây nhất sẽ biến mất khỏi màn hình Gần đây. Giá trị mặc định là 16, và giá trị tối đa là 50 (25 trên thiết bị có bộ nhớ thấp). Thấp hơn giá trị lớn hơn 1 là không hợp lệ.

Sử dụng lớp AppTask để xoá các công việc

Trong hoạt động tạo một tác vụ mới trên màn hình Gần đây, bạn có thể chỉ định thời điểm xóa tác vụ và kết thúc tất cả hoạt động được liên kết với tác vụ đó đang gọi finishAndRemoveTask() phương thức:

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

Giữ lại những việc cần làm đã hoàn thành

Nếu bạn muốn giữ lại một công việc trên màn hình Gần đây, ngay cả khi hoạt động của công việc đó đã đã hoàn tất, hãy chuyển FLAG_ACTIVITY_RETAIN_IN_RECENTS gắn cờ trong addFlags() của ý định chạy hoạt động.

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

Để đạt được hiệu quả tương tự, hãy đặt Thuộc tính <activity> android:autoRemoveFromRecents đến false. Giá trị mặc định là true cho các hoạt động trên tài liệu và false cho các hoạt động thường xuyên. Việc sử dụng thuộc tính này sẽ ghi đè Cờ FLAG_ACTIVITY_RETAIN_IN_RECENTS.

Bật tính năng chia sẻ URL gần đây (chỉ dành cho Pixel)

Trên các thiết bị Pixel chạy Android 12 trở lên, người dùng có thể chia sẻ đường liên kết vào nội dung bạn đã xem gần đây ngay trên màn hình Gần đây. Sau khi truy cập nội dung trong một ứng dụng, người dùng có thể vuốt đến màn hình Gần đây để tìm ứng dụng nơi họ xem nội dung, sau đó nhấn vào nút liên kết để sao chép hoặc chia sẻ URL.

Màn hình Gần đây có một đường liên kết để chia sẻ đã xem gần đây.

Bất kỳ ứng dụng nào cũng có thể bật tính năng liên kết Gần đây cho người dùng bằng cách cung cấp một giao diện người dùng web và ghi đè onProvideAssistContent()! như trong ví dụ sau:

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