java - 我如何判断我的上下文是否仍然有效?

标签 java android

我现在正在处理一种相当常见的情况 - 通过网络下载一些数据,然后更新 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/

相关文章:

java - Android 支持库 - 完全相同与混合版本

java 模板 如何显式指定在已命名的类上使用参数变量?

android - res文件夹中的可绘制文件夹?

java - 查找运行 web 服务的 android 设备的 IP 地址

java - 如何使用 Firebase 数据库和不同的 ViewHolder 根据类型(视频、文本、图像)恢复数据?

android - 如何以编程方式确定 Android 中当前 Activity 的 App

android - 修改init.rc添加自己的android原生服务

java - 如何使用 Jooq 执行与 UNION 连接的任意数量的选择

java - Jetty + Guice + Jersey 在访问资源时给出 404

java - 无法启动java