Android 如果退出活动,从活动启动的异步任务是否会导致问题?

Android 如果退出活动,从活动启动的异步任务是否会导致问题?,android,exception,user-interface,android-activity,android-asynctask,Android,Exception,User Interface,Android Activity,Android Asynctask,如果我在用户交互的活动中启动了异步任务。AsyncTask完成后,将修改UI并执行Toast。假设用户在异步任务完成之前退出活动。这是否会导致异常中出现的问题:例如,UI元素指针是否会变为null,并且当异步任务完成时,是否会导致运行时异常 现在,我已经完成了一个设计,应用程序类处理异步任务,并通过广播接收器通知活动,如果活动仍然存在(即更多的观察者模式),则执行UI任务。这是一种“更安全”的设计吗 /亨里克我相信这确实会造成问题。如果创建AsyncTask的活动不再存在,则会抛出异常,因为父处

如果我在用户交互的
活动中启动了
异步任务
AsyncTask
完成后,将修改UI并执行
Toast
。假设用户在
异步任务
完成之前退出
活动
。这是否会导致异常中出现的问题:例如,UI元素指针是否会变为null,并且当
异步任务
完成时,是否会导致运行时异常

现在,我已经完成了一个设计,
应用程序
类处理
异步任务
,并通过
广播接收器
通知
活动
,如果
活动
仍然存在(即更多的观察者模式),则执行UI任务。这是一种“更安全”的设计吗


/亨里克

我相信这确实会造成问题。如果创建
AsyncTask
的活动不再存在,则会抛出异常,因为父处理程序不再存在。正确的方法是在该活动中保留
AsyncTask
的引用,并捕获
onPause()
事件。在暂停事件中,我将取消
AsyncTask
并在有任何需要清理的情况下进行清理

回答第二个问题,这完全取决于要求是什么。如果要求该任务仍然存在,则可以将
AsyncTask
附加到应用程序。但这听起来好像有些地方不太对劲。你说如果活动仍然存在
。如果一旦活动消失,您就不需要任务,那么您也可以使用我最初的方法,即取消任务,并在活动暂停时将其丢弃

还有最后一点。如果在活动停止后仍保留对该活动的引用,则会出现内存泄漏,因为该活动仍有一个在任务完成之前无法清除的引用

这听起来很像你正在做的事情。如果你真的想继续完成这项任务,那么这似乎是一个很好的解决方案。我还发现这可能对你有帮助