2012-05-21 33 views
10

Hãy xem xét một AsyncTask bắt đầu trong một Hoạt động. Điều gì sẽ xảy ra nếu Hoạt động bị tạm dừng hoặc bị hủy? Sẽ onPostExecute() chạy? Nếu có, chuỗi giao diện người dùng nào sẽ được sử dụng?"Chạy trên chuỗi giao diện người dùng" cho onPostExecute() thực sự có ý nghĩa gì?

Chỉ cần tự hỏi.

Rất cám ơn trước.

+0

'onPostExcecute' sẽ chạy nhưng ném Ngoại lệ để cố chạy trên Chủ đề đã chết nếu Hoạt động của bạn bị hủy. Nếu bạn có AsyncTask chạy khi hoạt động của bạn có thể bị tắt, hãy cân nhắc chuyển mã của bạn sang dịch vụ hoặc sử dụng trình tải. – Jave

+0

trong trường hợp Hoạt động bị hủy: Nó sẽ bị lỗi vì mất tham chiếu với Hoạt động gốc. Hoạt động dừng bị tạm dừng, hoạt động vẫn chạy trên Hoạt động đó. Đối với kịch bản này: bạn nên sử dụng dịch vụ có mục đích và nhận kết quả qua Broadcast. –

Trả lời

10

Chủ đề giao diện người dùng khả dụng trong suốt thời gian hiển thị của ứng dụng có thể mở rộng trên sự kết hợp của nhiều hoạt động.

Bất cứ điều gì bạn thay đổi trong quan điểm phải được thực hiện trên thread UI và onPostExecute của AsyncTask phản ánh cùng một logic bằng cách thực hiện các hướng dẫn bên trên thread UI.

Bạn có thể sử dụng runOnUiThread trong của riêng bạn Thread để thực hiện thay đổi trên Chế độ xem. Nhưng kể từ AsyncTask có phương thức onPostExecute (cũng chạy trên chuỗi giao diện người dùng) nên bạn không cần sử dụng runOnUiThread ở đó.


Cập nhật

Về câu hỏi của bạn: Vâng, onPostExecute sẽ vẫn được gọi (vì nó gọi bởi một thread riêng biệt) ngay cả khi hoạt động của bạn bị phá hủy và nếu phương pháp này sẽ thao tác xem, bạn sẽ chỉ nhận được Lực lượng Đóng lỗi vì tham chiếu đến hoạt động của bạn không còn khả dụng nữa.

+2

câu hỏi của ông là khác nhau xin vui lòng đọc lại nó – Akram

0

Hãy nhớ gọi chức năng hủy bỏ để vô hiệu ngoại lệ trong trường hợp bạn bật hoặc bị hủy.

+0

Cảm ơn câu trả lời của bạn. Câu trả lời của Wagas cùng với mẹo của bạn sẽ cho tôi một ý tưởng làm thế nào để nâng cao thiết kế hiện tại của tôi hơn nữa. –

1

Thiết bị sẽ gặp sự cố ở số onPostExecute() vì chuỗi giao diện người dùng như một hộp thoại quy trình. Điều đó xảy ra với tôi, hoạt động phá hủy của tôi trước khi Asynctask của tôi hoàn thành. Nó nói "cửa sổ bị rò rỉ ....." Vì vậy, tôi loại bỏ onPostExecute(). Không còn sự cố nữa ..

Các vấn đề liên quan