我正在使用AsyncTask从服务器中检索显示在屏幕上的一些数据。问题是如果我在撤消数据时更改设备的方向(显示进度条),我的UI不会更新。
我已经完成了以下处理这种情况:
a)覆盖onRetainNonConfigurationInstance,它返回我的AsychTask的实例,在onCreate方法上检索它。 b)声明我的小部件是不稳定的 c)通过从AsycTask的postExecute调用setContentView重绘整个U. d)在小部件上调用invalidate方法
我在屏幕上没有出现任何错误,我的应用程序没有崩溃,但UI也没有更新。 我已经在调试模式下执行了代码,实际执行了更新UI的代码,但它什么也没做。
在日志中,我看到一条错误,说我的活动已经泄漏了一个窗口。
任何建议我做错了什么或不做我应该做的事情。
答案 0 :(得分:1)
问题几乎可以肯定是AsyncTask保留了对旧Activity的引用。 (也许这是一个内部阶级?)这是一个令人惊讶的难题。在Google小组的this thread上,对这些问题以及一些解决方案进行了很好的讨论。向下滚动查看Lance Nanek的答案,找出解决此问题的一些代码。
问题并非特定于AsyncTask;它可能发生在需要与UI交互的任何后台线程中,并且还需要在配置更改带来的destroy / start生命周期事件中继续存在。