Android 在后台打开AsyncTask中的托管对话框时未定义的结果
当用户(或其他应用程序,如手机应用程序)将我的应用程序推到后台时,我遇到了一个问题,它会给我带来一些问题 我的应用程序包含以下内容:Android 在后台打开AsyncTask中的托管对话框时未定义的结果,android,multithreading,Android,Multithreading,当用户(或其他应用程序,如手机应用程序)将我的应用程序推到后台时,我遇到了一个问题,它会给我带来一些问题 我的应用程序包含以下内容: 用户可以输入一些应该推送到服务器的信息 当用户单击“发送”时,我打开一个managed ProgressDialog并启动一个执行服务器通信的AsyncTask 服务器通信完成后,AsyncTask将报告回我的活动,我在其中执行dismissDialog() 在dismissDialog()之后,我将直接使用showDialog()显示另一个托管对话框,该对话框将
有没有其他人遇到过这个问题并知道解决方法?如果不查看代码,就很难说出问题出在哪里。然而,这里有一些东西可以帮助你解决这个问题。您可以重写的
onPause()
方法
这直接取自Android javadoc:
onPause()是处理离开活动的用户的地方。最重要的是,此时应提交用户所做的任何更改(通常提交给保存数据的ContentProvider)
如果不看代码,就很难说出问题所在。然而,这里有一些东西可以帮助你解决这个问题。您可以重写的
onPause()
方法
这直接取自Android javadoc:
onPause()是处理离开活动的用户的地方。最重要的是,此时应提交用户所做的任何更改(通常提交给保存数据的ContentProvider)
我看到了在OnRetainonConfiguration实例中保存对异步任务的引用的建议 或实现总线: 编辑:挑战的复杂性有两个方面: 1) 在kill上保存和恢复应用程序的状态,例如有来电时 2) 以某种方式在kill上继续异步任务,而不是在pause上取消它 这两个都是重大的挑战,同时尝试解决这两个问题会让我头疼。事实上,一想到它,我就感到头疼:)一个线索是,你说对话会在方向改变后返回。这可能是因为使用对话框的标准体系结构,操作系统会在方向更改时为您保存和恢复对话框的状态 [编辑]请参阅Commonware
@Override
public Object onRetainNonConfigurationInstance() {
task.detach();
return(task);
}
及
其中task是的实例
static class RotationAwareTask extends AsyncTask<Void, Void, Void> {
静态类RotationWareTask扩展异步任务{
我看不出这对所有类型的软杀戮都不起作用的原因,但在硬杀戮中,你会被杀。死了就是死:)我看到了在onRetainonConfiguration实例中保存异步任务引用的建议 或实现总线: 编辑:挑战的复杂性有两个方面: 1) 在kill上保存和恢复应用程序的状态,例如有来电时 2) 以某种方式在kill上继续异步任务,而不是在pause上取消它 这两个都是重大的挑战,同时尝试解决这两个问题会让我头疼。事实上,我一想到它就头疼:)一个线索是你说对话框会在方向改变时返回。这可能是因为使用对话框的标准体系结构,操作系统会处理保存和恢复在方向更改时为您响铃对话框的状态 [编辑]请参阅Commonware
@Override
public Object onRetainNonConfigurationInstance() {
task.detach();
return(task);
}
及
其中task是的实例
static class RotationAwareTask extends AsyncTask<Void, Void, Void> {
静态类RotationWareTask扩展异步任务{
我看不出这对所有类型的软杀戮都不起作用的原因,但是在硬杀戮中,你会被杀。死了就是死:)好吧,应用程序(实际上,一个相当大的应用程序)在onPause()中确实做了很多工作,但是,在我的特殊情况下,我看不出这会有什么帮助?如果onPause()的话,我以前尝试过抑制对话框已触发,但随后我遇到了其他问题(即,进度对话框仍被“卡住”)。@sicn我只是想您可以在
onPause()
方法中触发一个标志。然后在AsyncTask
中,您可以在继续之前检查该标志,并设置第二个标志来提醒onResume()
选择此任务结束的位置。在onResume()中
method您可以检查第二个标志,然后在此时决定是否显示一个对话框。这只是一个想法。这是我以前做的,但没有帮助。正如我所写的,进度对话框已经启动,然后该对话框将被卡住。:-/嗯,应用程序(实际上,一个相当大的应用程序)在onPause()中做了很多工作然而,在我的特殊情况下,我