Tôi đang làm việc với một tình huống khá phổ biến ngay bây giờ - tải xuống một số dữ liệu trên web, sau đó cập nhật một chế độ xem để hiển thị nó. Rõ ràng, tôi muốn tải xuống web ở chế độ nền và sau đó cập nhật chế độ xem trên chuỗi giao diện người dùng chính. Bây giờ nhìn vào mã của tôi, tôi hơi lo lắng về Hoạt động của tôi và các yếu tố giao diện người dùng của nó bị giết trước khi tôi cập nhật chúng. Dưới đây là bản chất của những gì tôi có trong tâm trí:Làm cách nào để biết ngữ cảnh của tôi vẫn hợp lệ?
Thread update = new Thread() {
public void run() {
final Data newData = requestData();
if (newData != null) {
post(new Runnable() {
public void run() {
Toast.makeText(MyClass.this, "I'll do things here that depend on my context and views being valid", Toast.LENGTH_SHORT).show();
}
});
}
}
};
update.start();
Có vẻ như thể là trong khi tôi đang tải dữ liệu, hoạt động này có thể bị phá hủy. Chuyện gì xảy ra sau đó? Chuỗi của tôi có tiếp tục thực thi không? Tôi sẽ cố gắng truy cập các vật thể chết?
Thông thường tôi làm điều này bởi AsycTask, nhưng công việc dường như đơn giản, đủ thời gian này để chỉ nội tuyến chủ đề-tung-chủ đề công cụ. Tôi sẽ làm mọi thứ tốt hơn bằng cách sử dụng AsyncTask thay thế?
Điều này có thể sẽ không biên dịch, bạn cần phải làm cho nó tĩnh, hoặc bạn cần phải thêm vào MyActivity.this. – EboMike
Tôi chủ yếu sao chép mã từ câu hỏi chỉ để đưa ra ý tưởng chung, tôi không có ý định mã trong câu trả lời được sử dụng cho các ứng dụng thực tế. Tôi đã cập nhật mã, bây giờ nó sẽ biên dịch (mặc dù điều này không thực sự quan trọng). – Malcolm
Tôi sẽ thử boolean này ngay bây giờ, vì vậy tôi sẽ cung cấp cho bạn một dấu kiểm. Tuy nhiên, cảm ơn bạn đã trả lời, Kurtis và EboMike. Tất cả tôi thậm chí không nghe nói về Loaders cho đến khi bạn đề cập đến chúng. – MaximumGoat