我正在使用处理程序在我的线程返回后更新我的 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/