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?
Đá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.