【问题标题】:How do I avoid returning to a parent activity performing a background task before finishing itself?如何避免在完成自身之前返回执行后台任务的父活动?
【发布时间】:2014-08-26 05:27:52
【问题描述】:

我的应用有一个启动器活动,它查看用于调用它的意图并根据意图调用许多活动之一(我们称之为子活动 B)。启动器活动还启动 AsyncTask 以在后台对 SharedPreferences 进行一些清理。后台任务完成后,启动器 Activity 会调用 finish() 自行终止。

如果活动B终止时后台任务仍未完成,我想避免返回启动器活动。我该怎么做?

我正在考虑在清单中的活动定义中使用android:noHistory="true"。然而,noHistory 的description 说: “当用户离开它并且它不再在屏幕上可见时,是否应该从活动堆栈中删除活动并完成(调用它的完成()方法)”。所以我担心这个活动可能会在它完成运行它的后台任务之前被终止。

是否保证允许我的后台任务运行完成?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: android android-intent android-asynctask


    【解决方案1】:

    制作很简单。在您的application instance 中启动后台任务并在那里清理首选项。这将允许您在开始下一个必需的活动后立即完成“调度员”活动。

    关于从后台堆栈中排除活动。有两种选择。您可以在清单文件中使用android:noHistory="true" 定义“调度程序”活动,或者使用FLAG_ACTIVITY_NO_HISTORY 启动“调度程序”活动。这两个选项都将从后台堆栈中排除活动。

    此外,如果“调度程序”活动在后台,Android 可能会决定随时销毁它。这可能会导致意想不到的结果。使用建议的孤子,您也没有这样的问题。

    【讨论】:

    • 我赞成您的回答,因为这是一个很好的建议,但除非用户明确终止它,否则即使用户退出应用程序也可以保持加载状态,这意味着应用程序运行时不会调用 Application#onCreate重新启动。所以清理任务可能很少被调用。
    • 我的意思是你现在从调度程序活动中调用清理任务,但任务在应用程序中运行。这就是为什么您可以立即完成活动。您根本不使用 Application.onCreate()。
    猜你喜欢
    • 2014-05-06
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多