屏幕方向更改后Android进度条未更新

屏幕方向更改后Android进度条未更新,android,Android,在开发android应用程序时,我构建了一个包含进度条的活动。 有一个异步任务将更新活动中的进度条。屏幕方向更改后,当异步任务仍在进行时,进度条不再更新。我相信异步任务没有引用新的进度条实例,该实例是在屏幕方向改变后,android调用onCreate方法时创建的 如果有人能给我一些建议,我将不胜感激 谢谢。通过asynctask,您可以在活动的一个方法中更新ProgressBar,而不是直接引用ProgressBar。例如 onPublishProgress(int progress) {

在开发android应用程序时,我构建了一个包含进度条的活动。 有一个异步任务将更新活动中的进度条。屏幕方向更改后,当异步任务仍在进行时,进度条不再更新。我相信异步任务没有引用新的进度条实例,该实例是在屏幕方向改变后,android调用onCreate方法时创建的

如果有人能给我一些建议,我将不胜感激


谢谢。

通过asynctask,您可以在活动的一个方法中更新ProgressBar,而不是直接引用ProgressBar。例如

onPublishProgress(int progress) { 
    updateProgressBar(progress);
}
在活动中:

updateProgressBar(int progress) {
    progressBar.setProgress(progress);
}
通过重写onSaveInstanceState(),可以在销毁活动之前保存其状态。 将进度整数保存在此处,然后保存在onCreate中,
检查savedInstanceState是否不为null,然后在保存的整数处创建进度条集。

您的正确任务不知道活动的新实例,因为该活动在方向更改期间被销毁并重新创建

但是有一个方法,当方向改变时会调用它,您可以使用它将AsyncTask传递给新活动

在销毁活动之前调用,重写该方法并返回正在运行的异步任务的引用。在onCreate()方法中,您可以通过调用来检索AsyncTask。请注意,您必须处理第一次创建活动并且getLastNonConfigurationInstance()将返回null的情况


此外,您必须将活动传递给AsyncTask,以便它可以引用当前活动的进度条。因此,我建议实现两种方法,在AsyncTask中注册和注销活动。因此,在OnRetainOnConfiguration Instance()中,您注销将被销毁的“旧”活动,在onCreate中,您可以将新创建的活动注册到新的异步任务中,或者注册到从GetLastNonConConfiguration Instance()检索到的活动中。

我知道这是旧的,事情可能已经发生了变化,但弗洛的答案不应该被接受。根据此处的文档:

此函数纯粹作为优化调用,您不能依赖于调用它

换句话说,如果您正在做一些重要的事情,并且当某个活动被破坏时,“事情”必须发生,那么这是一个糟糕的解决方案


更好的解决方案是使用
onSaveInstanceState(Bundle outState)
在此处找到:

您是否调用过findViewById(),可能在方向更改后给您提供了一个过时的引用?>我相信异步任务没有引用新的进度条实例,而且它不应该引用。您应该手动完成所有这些操作。您应该接受答案和/或投票。您是否可以更新您的答案以反映@supersubbs提供的新信息,即这不是解决问题的可靠方法。