2012-03-21 17 views
23

Trong Apress Pro Android 4 tác giả đã nói rằng:Android Asyntask: Sử dụng tài liệu tham khảo yếu cho ngữ cảnh để tránh màn hình xoay thiết bị

[...] bối cảnh hiện đang chạy hoạt động sẽ không còn giá trị khi thiết bị được xoay. [...] Một cách tiếp cận là sử dụng tham chiếu yếu cho hoạt động thay vì tham chiếu cứng [...]

Nhưng tác giả chỉ đề xuất điều này và không cho biết cách thực hiện. Ai đã làm điều này trước khi xin vui lòng cho tôi một ví dụ.

Trả lời

56

Một nơi nào đó trong số AsyncTask bạn sẽ muốn chuyển vào hoạt động của mình. Sau đó, bạn sẽ lưu tham chiếu đó vào tham chiếu yếu. Sau đó, bạn có thể dereference và sử dụng nó một lần nữa trong onPostExecute.

viên Class:

WeakReference<Activity> weakActivity; 

Một nơi nào đó trong AsyncTask, có lẽ một trong hai constructor hoặc onPreExecute:

weakActivity = new WeakReference<Activity>(activity); 

Trong onPostExecute:

Activity activity = weakActivity.get(); 
if (activity != null) { 
    // do your stuff with activity here 
} 
+0

tốt đẹp, nó thực sự giúp nhờ –

+1

'activity' vẫn sẽ là tham chiếu không hợp lệ i f GC đã không đá kịp thời. Hãy sửa tôi nếu tôi sai. – q126y

0

Nếu bạn muốn khôi phục hoạt động trước đó, tại sao không truy cập onSaveInstanceState và khôi phục sau này.

Kiểm tra liên kết này để biết thêm chi tiết

Saving application state

1

Dưới đây là một ví dụ về WeakReference để lưu trữ một bối cảnh;

WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext()); 

Bây giờ chúng tôi có thể sử dụng yếu tố nàyReference để thực hiện Hoạt động liên quan đến hoạt động/bối cảnh.

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