2011-10-04 29 views
5

Cách thích hợp để sử dụng asynctask là gì? Giả sử người dùng nhập một hoạt động và asynctask bắt đầu và trong khi asynctask đang chạy người dùng quyết định điều hướng đến một trang khác.Android - Cách sử dụng AsyncTask phù hợp?

  • Điều gì sẽ xảy ra với anynctask? nó sẽ chạy cho đến khi nó được thực hiện?
  • Tôi có chịu trách nhiệm cho việc ngừng hoạt động asynctask này bằng cách nào đó không?

Trả lời

5

Asynctask sẽ tiếp tục chạy. Asynctask có thể chết khi hệ điều hành Android cố gắng lấy lại bộ nhớ khi nó chạy thấp. Nếu bạn không quan tâm rằng nhiệm vụ không đồng bộ có thể không kết thúc, thì có lẽ điều này không quan trọng, nhưng đó là thực hành không tốt.

Ngoài ra, có thể khi tác vụ không đồng bộ chết tùy thuộc vào cách bạn lưu trữ/xử lý kết quả, bạn có nguy cơ cố gắng chỉnh sửa Hoạt động/đối tượng trong hoạt động đó không còn ở đó nữa, dẫn đến nullpointerexceptions và những điều xấu khác. thích hợp cách thực hiện việc này là bắt đầu một dịch vụ từ hoạt động của bạn và bắt đầu một asynctask từ dịch vụ. Bạn nên làm theo một trong những mẫu thiết kế được nêu trong bài nói chuyện này được đưa ra tại Google IO 2010:

Android REST Client Design Patterns

Đó nói chuyện thú vị nhưng rất khó để làm theo và đưa ra không có mã số, vì vậy đây là một hướng dẫn tốt mà tôi sử dụng để học công cụ này:

Downloading Data with Services

Ngoài ra, android sẽ quản lý một threadpool nhiệm vụ asynch cho bạn (tôi tin nó sẽ bắt đầu giết chúng khi bạn có nhiều hơn 5 trong quá trình của bạn), bạn không cần phải giết chúng. kiểm tra câu trả lời ở đây:

How AsyncTasks die

0

bệnh Vâng cố gắng để được nhanh hơn:

  • Bạn phải chịu trách nhiệm để ngăn chặn một AsyncTask nếu không làm ảnh hưởng tiêu cực đến chương trình của bạn. Đọc this.

  • AsyncTask của bạn sẽ vượt qua cuộc sống của nó làm onPreExecute() - doInBackground (Params ...) - onPostExecute (Result) -end của cuộc sống AsyncTask

  • AsyncTask đã được thực hiện để thực hiện một lần duy nhất, sau đó nếu bạn muốn thực hiện nó một thời điểm khác bạn phải tạo một số khác
0
  1. Vâng, AsyncTask sẽ tiếp tục chạy nếu bạn không ngăn chặn nó khi điều hướng để Hoạt động khác. Nó sẽ tiếp tục chạy ngay cả khi cấu hình của thiết bị thay đổi (ví dụ: xoay vòng). Nếu bạn muốn làm điều gì đó trên postExecute() có tác dụng trên giao diện người dùng, thì bạn phải đảm bảo rằng tham chiếu của các tiện ích con giao diện người dùng mà bạn sửa đổi trong phương thức này là hợp lệ, ngay cả sau khi xoay, khi Hoạt động được tạo lại.

  2. Có, bạn chịu trách nhiệm dừng (có nghĩa là .cancel()) bạn AsyncTask nếu bạn không cần. Tuy nhiên, lưu ý rằng một AsyncTask đang ở giữa việc thực hiện nó sẽ không dừng lại chỉ vì bạn đã gọi .cancel() trên nó. Nó sẽ tiếp tục chạy, nhưng phương thức postExecute() của nó sẽ không được gọi khi nhiệm vụ được hoàn thành.

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