我有一个activity
,其中有一个async task
会做一些下载工作。在下载时,它将显示l oading dialog
我的问题是,当我仅在one orentiaon
进行此操作时,它对我来说很好。但是当我在下载时rotate
,它显示window leaked
并且会在崩溃时崩溃
dialog.cancel
在我的帖子中执行。
从我对它的研究中我理解它是因为change in the context
当设备为rotated
时
这是device
为rotated
时activity
为recreated
,context
为changed
。
但是我已经创建了旧对话框和wasn't the current context
对话框。所以当我取消它时显示错误
对此有什么解决方案,任何想法都是如此
我使用 honeycomb
,我尝试了fragment
,但没有得到一个很好的样本。我现在主要是尝试这个,
如果有人能给我一些链接,那将是
大
答案 0 :(得分:3)
首先:使用showDialog
方法(there are a lot of examples in the official documentation)打开对话框。如果这样做,活动将负责解除destroy上的对话框,并在重新创建活动后重新显示它。
另外......如果对话框显示进度条(不是滚轮),则需要在方向更改后更新对话框的进度。为此,我建议使用onRetainNonConfigurationInstance
返回对话框的当前状态和/或活动本身。然后,您可以使用getLastNonConfigurationInstance
来恢复该状态。关于这两种方法的Google,如果你想看看例子。
要记住的另一件事是:如果要更新对话框的状态和/或AsyncTask
中的任何其他UI元素,则必须注意在重新创建活动后,{{1} }可能指向错误的UI引用。为了处理这个问题,您可以创建一个代理类(代理设计模式)来从当前UI元素中分离AsyncTask
进度通知。
答案 1 :(得分:-1)
这是因为当设备方向改变时,Activity会重新创建。要禁用此功能,您可以像这样配置Activity。
<activity .... android:configChanges="orientation|keyboard"
...
>