我现在正在处理一种相当常见的情况 - 通过网络下载一些数据,然后更新 View 以显示它。显然,我想在后台进行网页下载,然后在主 UI 线程上更新 View 。现在查看我的代码,我有点担心我的 Activity 及其 UI 元素在我更新它们之前被杀死。这是我的想法的本质:
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();
似乎有可能在我下载数据时, Activity 可能会被破坏。那么会发生什么?我的线程会继续执行吗?我最终会尝试访问死对象吗?
通常我通过 AsycTask 来完成这项工作,但这次工作似乎很简单,只需内联线程启动线程的东西。我会改用 AsyncTask 使事情变得更好吗?
最佳答案
如果您的 Context
是一个 Activity
,您可以使用 isFinishing()
方法检查它是否正在完成或已经完成:
if ( context instanceof Activity ) {
Activity activity = (Activity)context;
if ( activity.isFinishing() ) {
return;
}
}
Toast.makeText(context, "I'll do things here that depend on my context and views being valid", Toast.LENGTH_SHORT).show();
关于java - 我如何判断我的上下文是否仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856103/