在我的应用程序中,活动A是启动器活动,从A称为B,从B称为C,我有超过5个活动。在C中,当我按下主页按钮,再次打开我的应用程序时,它打开C,这在我的情况下很好。但是在按下C中的主页按钮后,当它闲置一段时间并且应用程序被杀死时,之后当我打开我的应用程序时它会打开C.但我想打开那个时间的主启动器活动。我怎么能这样做?
A> B> C> HOME按钮>闲置一段时间>申请被杀>打开应用>下进行。
在这种情况下,我想打开主要活动A而不是C。
答案 0 :(得分:6)
您需要检测到Android已经杀死了您的进程,之后用户已经返回应用程序(导致Android创建新进程)。我已经在很多答案中描述了如何做到这一点:
https://stackoverflow.com/a/29802601/769265
答案 1 :(得分:0)
您可以将android:clearTaskOnLaunch="true"
放入活动A的清单中,以使启动器始终进入该活动。
答案 2 :(得分:0)
您是否尝试在onBackPressed中启动线程并在特定时间内休眠,之后调用finish(),否则停止线程(从调用完成),并获得相同的活动。
答案 3 :(得分:0)
我知道这是一篇老文章,并且上面的David Wasser's answer过去是最好的解决方案...现在有一种更好的处理方式。
使用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
答案 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.