7

在我的应用程序中,活动 A 是启动器活动,从 A 调用 B,从 B 调用 C,我有超过 5 个活动。在 C 中,当我按下主页按钮并再次打开我的应用程序时,它会打开 C,这在我的情况下很好。但是在C中按下主页按钮后,当它空闲一段时间并且应用程序被杀死后,当我打开我的应用程序时它会打开C。但我想在那个时候打开主启动器活动。我怎样才能做到这一点?

A > B > C > HOME 按钮 > 空闲一段时间 > 应用程序被终止 > 打开应用程序 > C.

在这种情况下,我想打开主要活动 A 而不是 C。

4

8 回答 8

9

您将需要检测 Android 已经杀死了您的进程,然后用户返回到应用程序(导致 Android 创建一个新进程)。我已经在许多答案中描述了如何做到这一点:

https://stackoverflow.com/a/29802601/769265

https://stackoverflow.com/a/27276077/769265

https://stackoverflow.com/a/11249090/769265

于 2017-04-20T09:55:55.300 回答
0

您可以android:clearTaskOnLaunch="true"为活动 A 放入清单,以使启动器始终进入该活动。

于 2012-09-11T05:56:40.063 回答
0

您是否尝试过在 onBackPressed 中启动一个线程并休眠一段特定时间,之后它会调用finish(),或者停止线程(从调用finish),并重新获得相同的活动。

于 2017-04-22T13:39:14.897 回答
0

我知道这是一篇旧帖子,正如大卫瓦瑟的上述回答是过去最好的解决方案......现在有一种更好的做事方式。

使用 来完成所有这些工作的更好方法ProcessLifecycleOwner,它就是为此而设计的。简而言之,来自 JavaDoc:

“为整个应用程序过程提供生命周期的类。”

如果您的应用程序被终止,应用程序生命周期 onDestroy 将被调用,这使您可以创造性地按照自己的意愿进行跟踪。它可以像设置一个 SharedPreference 标志一样简单,您可以在应用程序重新启动不正确时检查该标志。

请注意,您需要添加适当android.arch的依赖项以利用新LifecycleObserver的 ,ProcessLifecycleOwner等。

下面是如何处理整个应用程序的每个 LifecycleEvent 的示例。

public class MyApplication extends Application implements LifecycleObserver {

    @Override public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate(){
        // ... Awesome stuff
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart(){
        // ... Awesome stuff
    }   

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume(){
        // ... Awesome stuff
    }   

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause(){
        // ... Awesome stuff
    }   

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop(){
        // ... Awesome stuff
    }   

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestory(){
        // ... Awesome stuff
    }   

    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    public void onAny(){
        // ... Awesome stuff
    }
}

这是一篇不错的文章,我通过 Kotlin 示例了解了这一点,并在这篇文章之外提供了一些技巧:Background and Foreground events with Android Architecture Components

于 2018-11-20T15:15:52.170 回答
0

应用程序被杀死和活动被杀死是两件不同的事情。要测试您的活动是否被终止(不终止应用程序),请激活开发者模式并在离开时设置终止活动。

于 2019-12-02T08:40:19.060 回答
-1

按下主页会将您从应用程序切换到主屏幕,同时让您的应用程序在后台运行。

除了当您的手机内存等资源不足时,它会开始关闭在后台运行的应用程序,以便您的手机有足够的资源来完成您现在尝试执行的操作。游戏通常是手机为了节省资源而“杀死”的第一批应用程序之一,因为它们通常比其他应用程序使用更多的内存和 CPU。这就是为什么有时您的游戏仍然处于暂停状态,而有时 Android 会为您关闭它。

于 2012-09-11T05:43:11.647 回答
-2

if your app is killed by the system i dont think it will start from c. If you are killing it through an task killer app then its a mistake. Force stop it from the app settings and then check.However if killed by task killer app and then from C if you get back to B and it is crashing then check for result code. if resultcode != RESULT_OK then you can handle your code here and save app from crash. if you have not started you activity for result then finish B and A before launching B and c.

于 2012-09-11T06:16:21.640 回答
-2

在按下主页时,你还没有完成活动它仍然存在于堆栈中。只有它会暂停所以使用它。

如果您从活动 A 中调用活动 B,从 B 中调用 C

A->B

使用来自 A 的 startactivityforresult

又是 B->C

使用 B 的 startactivityforresult

并且当您想从 C 退出然后 setResult(即 RESULT_OK) 并完成 C.and 在 B 中的 OnActivityResult() 中,检查 resultcode == RESULT_OK 然后再次完成 B 和 setresult(RESULT_OK) 为 A.same 过程将遵循完成一个。

这将使您退出应用程序。应用程序将从 A 而不是从 C 开始。

于 2012-09-11T05:46:00.093 回答