在android中按下主页按钮后应用程序没有打开主要活动

时间:2012-09-11 05:40:59

标签: android

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

A> B> C> HOME按钮>闲置一段时间>申请被杀>打开应用>下进行。

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

8 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您是否尝试在onBackPressed中启动线程并在特定时间内休眠,之后调用finish(),否则停止线程(从调用完成),并获得相同的活动。

答案 3 :(得分:0)

我知道这是一篇老文章,并且上面的David Wasser's answer过去是最好的解决方案...现在有一种更好的处理方式。

使用ProcessLifecycleOwner(为此目的而设计)的更好的方法。简而言之,来自JavaDoc:

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

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

  

请注意,您需要添加适当的android.arch依赖项才能利用新的LifecycleObserverProcessLifecycleOwner等。

下面是一个示例,说明了如何处理整个应用程序的每个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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

  

按住主页可将您从应用程序切换到主屏幕   让您的应用在后台运行。

     

除非您的手机在内存等资源上运行不足   将开始关闭在后台运行的应用程序,以便   你的手机有足够的资源用于你现在要做的事情。   游戏通常是手机将“杀死”以保存的第一批应用程序   资源,因为他们经常使用比其他应用程序更多的内存和CPU。   这就是为什么有时你的游戏暂停,有时甚至是暂停   Android已经为您关闭了它。

答案 6 :(得分:-2)

在按下home时,你还没有完成活动,它仍然存在于stack.only它会暂停,所以使用它。

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

A->乙

使用来自A的startactivityforresult

再次B-> C

使用来自B的startactivityforresult

当你想退出C然后是setResult(即RESULT_OK)并完成C.并在B中的OnActivityResult()中,检查resultcode == RESULT_OK然后再次完成B和setsult(RESULT_OK)为A.same程序将按照完成A。

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

答案 7 :(得分:-2)

如果您的应用被系统杀死,我认为它不会从c开始。如果你通过任务杀手app杀死它,那么它就是一个错误。强制停止它从应用程序设置,然后检查。但是如果被任务杀手应用程序杀死然后从C,如果你回到B并且它崩溃然后检查结果代码。如果resultcode!= RESULT_OK那么你可以在这里处理你的代码并保存应用程序免于崩溃。如果你没有开始活动结果,那么在启动B和c之前完成B和A.