Câu trả lời:
Nó có thoát ngay lập tức hay hoàn thành chức năng mà nó được gọi không?
Phương thức được gọi finish()
sẽ chạy đến khi hoàn thành. Các finish()
hoạt động thậm chí sẽ không bắt đầu cho đến khi bạn trở về điều khiển Android.
Mỗi sự kiện vòng đời như onCreate
, onResume
, onPause
.... onDestroy
của một Hoạt động luôn luôn kêu gọi một chủ đề duy nhất - Các "chủ đề chính".
Tóm lại, chuỗi này được hỗ trợ bởi một Hàng đợi mà tất cả các sự kiện hoạt động sẽ được đăng. Luồng này có thể thực thi tất cả các sự kiện này theo thứ tự chèn.
Nếu bạn đang gọi finish()
trong một trong các lệnh gọi lại vòng đời như onCreate()
... thì một thông báo "kết thúc" sẽ được thêm vào hàng đợi này nhưng luồng không được tự do chọn và thực hiện hành động "kết thúc" cho đến khi phương thức thực thi hiện tại trả về tức là Luồng được giải phóng khỏi nhiệm vụ hiện tại.
ondestroy()
là cuộc gọi cuối cùng bạn nhận được trước khi hoạt động của bạn bị hủy.
Điều này có thể xảy ra do hoạt động đang kết thúc (ai đó đã gọi finish()
nó hoặc do hệ thống đang tạm thời hủy phiên bản hoạt động này để tiết kiệm dung lượng. Bạn có thể phân biệt giữa hai tình huống này bằng isFinishing()
phương pháp.
Nếu có hai hoạt động A và B. Và luồng của bạn đang đi từ A> B; và B = A gọi finish()
.
Sau đó,
Phương thức mà bạn đã gọi finish()
sẽ thực thi như Mark đã đề cập. Và luồng gọi lại sẽ như sau:
onPause()
của activity A
onRestart()
> onStart()
> onResume()
Của Hoạt động Bfinish()
từ activity A
; chỉ onStop()
trong số Activity A
sẽ được gọi ở đây. Trong khi, trong trường hợp này, chúng tôi đã gọi finish()
từ đâu Activity A
; Vì vậy, onStop()
và onDestroy()
cả hai sẽ được gọi cho activity A
.