java - 处理程序在没有 Activity 的情况下返回?

标签 java android

我正在使用处理程序在我的线程返回后更新我的 UI - 以下是从线程(在 fragment 中)运行的方法

public void signedIn(final boolean success, final String error) {
    Handler mainHandler = new Handler(getActivity().getMainLooper());
    mainHandler.post(new Runnable() {

        @Override
        public void run() {
            if(success) {
                Toast.makeText(getActivity(), "Signed In!",
                        Toast.LENGTH_SHORT).show();
            } else if (!success) {
                Toast.makeText(getActivity(), "Failed!" + error,
                        Toast.LENGTH_SHORT).show();
            }
        }
    });


}

这工作正常,但是如果我在正确的时间旋转手机,则在创建 Activity 之前调用处理程序,因此 getActivity() 返回 null 并且应用程序崩溃。我不能只将方法包装在 if (getActivity() != null) 中,否则它根本不会更新 UI。

解决这个问题的最佳方法是什么? android 有什么我可以用来解决这个问题的吗?

谢谢,

凯文。

编辑

因此,我实现了以下似乎有效的响应之一。在应用程序类中使用静态上下文引用:Static way to get 'Context' on Android?

我不确定使用它的细节,所以有点犹豫 - 我可能会发布另一个问题,看看这是否有问题?

最佳答案

this回答您可以查看处理与轮换相关的应用程序配置更改的最佳实践。处理此问题的最佳方法是使用 setRetainInstance(true) 创建一个 fragment ,以保持对正在进行的任务的引用。

这是必需的,因为当您旋转屏幕时,Android 会破坏您当前的 Activity (甚至调用 onDestroy 方法)并使用新配置创建一个新 Activity 。这样做您可以知道任务何时完成并对尚未创建的 Activity 运行 UI 操作。

编辑

如果上下文为空, fragment 任务不应该推送结果,只是存储它。当 Activity 被重新加载时,它的 onCreate 将被调用。由于您使用了任务 fragment ,您将能够检索 fragment 实例并知道该任务是否已完成。 Activity 唯一应该做的就是根据已经完成的 fragment 任务恢复其新状态。

关于java - 处理程序在没有 Activity 的情况下返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302596/

相关文章:

java - 你好,我正在努力理解这段代码中 if 语句的 O 表示法运行时

java - 使用带调试的 IntelliJ 在 VisualVm 中进行分析

java - 噩梦般的 java 泄漏...使用循环和 jdbc

java - 将 3D 模型从 Maya 导入 JOGL

android - 从命令行构建发布apk所需的最小android sdk文件数量

java - 如何将附件作为请求发送,其中附件是请求正文的字段?

android - Firebase Firestore 和 Cloud Storage : deleting both a DB entry and its associated file can result in one being actually deleted, 其他没有

java - 如何在 android Libgdx 中设置纵向主屏幕和横向其他屏幕?

java - 我的应用程序直接进入 MainActivity

android - 带有 "app:showAsAction="ifRoom|collapseActionView""的 SearchView 是否有错误?