2015-06-27 24 views

Trả lời

21

AsyncTask là lớp Android trừu tượng giúp ứng dụng Android xử lý chuỗi giao diện người dùng chính một cách hiệu quả. Lớp AsyncTask cho phép chúng tôi thực hiện các tác vụ/tác vụ nền lâu dài và hiển thị kết quả trên chuỗi giao diện người dùng mà không ảnh hưởng đến chủ đề chính.

1. Quy trình AsyncTask là không bị hệ điều hành tự động giết. Các quá trình AsyncTask chạy trong nền và chịu trách nhiệm hoàn thành công việc của chính nó trong mọi trường hợp. Bạn có thể hủy AsycnTask của mình bằng cách gọi phương thức cancel (true). Điều này sẽ gây ra các cuộc gọi tiếp theo tới isCancelled() để trả về true. Sau khi gọi phương thức này, phương thức onCancelled (Object) được gọi thay vì onPostExecute() sau khi doInBackground() trả về.

2. Sau khi hoàn thành nó hoạt động, nền thread nó làm việc trên đang dừng. AsyncTask có onPostExecute() được gọi khi công việc của bạn hoàn tất. Phương thức này được gọi sau khi phương thức doInBackground() hoàn tất quá trình xử lý. Kết quả từ doInBackground() được chuyển cho phương thức này.

25

Nếu bạn khởi động AsyncTask bên trong một Hoạt động và bạn xoay thiết bị, Hoạt động sẽ bị hủy và một phiên bản mới sẽ được tạo.

Tương tự như vậy nếu người dùng điều hướng đến các hoạt động khác, hoạt động hiện tại sẽ bị phá hủy hoặc đi vào hoạt động nền stack và hoạt động mới sẽ ở tiền cảnh.

Nhưng AsyncTask sẽ không chết. Nó sẽ tiếp tục sống cho đến khi nó hoàn thành. Và khi nó hoàn thành, AsyncTask sẽ không cập nhật giao diện người dùng của Hoạt động mới. Thật vậy nó cập nhật các trường hợp trước đây của hoạt động đó không được hiển thị nữa. Điều này có thể dẫn đến một ngoại lệ của kiểu java.lang.IllegalArgumentException: View không được gắn vào trình quản lý cửa sổ nếu bạn sử dụng, ví dụ, findViewById để lấy một khung nhìn bên trong Activity.

+1

"khi nó hoàn tất, AsyncTask sẽ không cập nhật giao diện người dùng của Hoạt động mới Trên thực tế nó cập nhật các trường hợp trước đây của hoạt động mà không được hiển thị nữa." - Nếu hoạt động mới là ngắn ngủi, làm thế nào để giữ cho người già thể hiện của hoạt động còn sống? – Jaydev

+0

@JaydevKalivarapu Đừng gọi kết thúc từ hoạt động cũ khi bắt đầu hoạt động mới. –

+0

Trong trường hợp đó, khi tôi chuyển về hoạt động cũ bằng Intent, tôi sử dụng chính cá thể hiện tại? – Jaydev

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