AsyncTask 完成后关闭 Activity 并返回父 Activity

Posted

技术标签:

【中文标题】AsyncTask 完成后关闭 Activity 并返回父 Activity【英文标题】:Closing Activity and returning to parent Activity after AsyncTask finishes 【发布时间】:2017-12-16 18:47:49 【问题描述】:

假设 Activity A 是父 Activity,而 Activity B 是子 Activity。活动 B 实现 AsyncTask。在 AsyncTask 完成后,我希望通知用户异步功能已正确完成,然后我希望我的应用程序返回到 Activity A 而不用户与 Activity B 交互。 我知道 onPostExecute 将促进我正在尝试做的事情。

    我应该使用snackbar 还是创建一个对话框? 是否可以在返回 Activity A 后通知用户 AsyncTask 正确完成?

也许这些问题是微不足道的,但我正试图获得更多的见解

【问题讨论】:

是的,在活动 B 的 onPostExecute() 中调用 finish()。 【参考方案1】:
    您应该使用带有 setEnableToTochOutside(false) 的对话框来防止用户在异步任务的 Preexcute 上与活动 B 进行交互。 在 PostExcute 上,如果你想返回数据或类似标志的东西到活动 A,从活动 A,你 startActivityForResult(A, B)。而在activity B的PostExcute上,你将返回前的Data和result设置为activity A。当activity A收到数据时,只需在此处进行通知即可。或者,如果您想注意活动 B,只需制作 Toast,或带有取消按钮的对话框(按下完成活动 B)。关于StartActivityForResult:an example here

Activity A返回数据的种类很多,可以研究一下LocalBroadcast或者EventBus。

【讨论】:

【参考方案2】:

您可以使用界面来通知您的活动以完成异步任务。 这是answer 的例子。

【讨论】:

感谢您的回答。我想做的是不同的。 AsyncTask 将在子 Activity 运行时执行。当 AsyncTask 完成时,我希望子 Activty 关闭并且应用程序返回父 Activty。【参考方案3】:

在 AsyncTask 的 onPostExecute 方法中实现一个快餐栏,并调用 finish() 来结束活动。应该可以的。

【讨论】:

以上是关于AsyncTask 完成后关闭 Activity 并返回父 Activity的主要内容,如果未能解决你的问题,请参考以下文章

仅当在 Android 中单击按钮后条件为真时才启动 Activity

应用程序关闭后后台进程(AsyncTask)仍在运行

Android AsyncTask问题

最佳实践:方向更改期间的 AsyncTask

在 AsyncTask 完成后做某事

Android:按home后恢复应用程序时,应用程序始终从根Activity启动