Có một sự khác biệt quan trọng trong hành vi tác vụ ứng dụng tùy thuộc vào thứ tự của startActivity()
và finish()
lời gọi.
Trường hợp mà tôi đang mô tả chỉ nằm trong phạm vi tình huống khi hoạt động hiện tại (hoạt động đang bị dừng) là hoạt động duy nhất trong tác vụ.
Thông thường, bạn sẽ mong đợi rằng ý định bắt đầu (ý định bạn tạo để bắt đầu một hoạt động khác) không bị hệ thống thay đổi. Và đó không phải là trường hợp nếu finish()
được gọi vào hoạt động cuối cùng trong tác vụ trước khi gọi startActivity()
.
Trong trường hợp này, ActivityManager, một thành phần hệ thống, trong khi thực thi cờ startActivity()
sẽ thêm Intent.FLAG_ACTIVITY_NEW_TASK
vào ý định của bạn.
Khi điều này xảy ra, người ta có thể nhận thấy một mục nhật ký trong LogCat tương tự như mục này:
W / ActivityManager: startActivity được gọi khi kết thúc ActivityRecord {4a19b47 u0 com.foo.bar/com.foo.bar.SplashActivity t4928 f}; buộc Intent.FLAG_ACTIVITY_NEW_TASK cho: Intent {cmp = com.foo.bar / com.foo.bar.MainActivity}
Và đây là bước ngoặt mà từ đó (trong một số điều kiện) mọi thứ có thể trở nên sai lầm.
Tóm lại, nếu bạn muốn ở một khía cạnh an toàn (thay vì gặp phải các tác dụng phụ không mong muốn của việc FLAG_ACTIVITY_NEW_TASK
được thêm vào mục đích), thì thứ tự phải là:
Demo dự án .
Ghi màn hình: