JavaScript is required

A1,A2,A3 và A4 là các hoạt động được gọi bằng cách sử dụng ý định. Sau đó, A1-A2-A4--A3.A2 gọi A4 với cờ ý định FLAG_ACTIVITY_CLEAR_TOP. Khi phương thức finish() được gọi trên A3, kết quả sẽ là gì hoạt động đang chạy hiện tại?

A.

A.A4

B.

A3

C.

A2

D.

A1

Trả lời:

Đáp án đúng: A


Câu hỏi liên quan đến việc quản lý ngăn xếp Activity trong Android khi sử dụng các Intent flags, đặc biệt là FLAG_ACTIVITY_CLEAR_TOP. Để hiểu rõ, ta cần phân tích luồng hoạt động và tác động của flag này.

Ban đầu, các Activity được gọi theo thứ tự: A1 -> A2 -> A4 -> A3. Sau đó, A2 gọi A4 bằng Intent có flag FLAG_ACTIVITY_CLEAR_TOP. Flag này có nghĩa là:

  • Nếu một instance của Activity A4 đã tồn tại trong ngăn xếp, tất cả các Activity phía trên A4 (trong trường hợp này là A3) sẽ bị hủy (finish()).
  • A4 sẽ được đưa lên đầu ngăn xếp.
  • Nếu A4 được khai báo với android:launchMode="singleInstance", hệ thống sẽ tạo một instance mới và đưa nó lên đầu ngăn xếp.

Trong trường hợp này, sau khi A2 gọi A4 với FLAG_ACTIVITY_CLEAR_TOP, A3 sẽ bị hủy (finish()). Sau đó, phương thức finish() được gọi trên A3, nhưng vì A3 đã bị hủy trước đó do flag FLAG_ACTIVITY_CLEAR_TOP, nên việc gọi finish() này không có tác dụng gì thêm. Activity đang chạy hiện tại sẽ là A4.

Câu hỏi liên quan