2015-09-28 77 views
0

我有一个应用程序需要创建一个会话才能工作。当应用程序通过android.intent.action.MAINandroid.intent.category.LAUNCHER活动(LoginActivity)启动时,会话创建得很好,存储在单例类中,用户导航到MainActivityAndroid是否允许启动曾经杀死应用程序的任意活动?

现在应用程序往往会崩溃,因为会话不存在。我认为这是因为Android直接开始MainActivity,而之前创建的会话已被终止。这可能是原因吗?

我是否需要预计我的应用程序会在任何活动中重新启动?

+0

您可以使用共享首选项来存储会话相关数据,并在应用程序再次启动时重新创建会话。 –

回答

2

作为一个例子(或曾经因为我没有测试过这段时间),绝对是这种情况,如果应用程序崩溃,Android的“操作系统”可以在除main之外的其他活动启动应用程序。

这得到了Android在线文档的支持,它强调了Android应用程序可以拥有多个入口点的事实,这一点与许多其他系统不同。这可有点在第一混乱:(http://developer.android.com/guide/components/fundamentals.html):

因此,与大多数其他系统的应用,Android应用没有一个单一入口点(没有main()函数,例如)。

当一个应用程序中的某个活动可用于从另一个应用程序“调用”时,通常会使用这个选项。

我认为它可能会有点过分,说它会处于一个任意的活动,因为我认为它有一些逻辑 - 例如重新开始发生崩溃的活动,或者从那个点它以前是否由系统关闭应用程序以释放内存等。

+0

谢谢。该文档侧重于一个应用程序启动另一个应用程序的活动的用例。和你一样,我也猜测应用程序会在进程被终止之前的活动中重新启动(清除内存优先级,不会崩溃)。但是有没有关于这方面的文件? –

+0

我不确定官方文档,但有一篇文章通常被提到(它很陈旧,但我认为它解释了很好的设计,在这里有帮助):http://android-developers.blogspot.nl/2010 /04/multitasking-android-way.html。我认为,这个reddit讨论也很有用,因为它解释了设计背后的想法:https://www.reddit.com/r/androiddev/comments/20y5uf/system_tries_to_restart_each_activity_in_the/ – Mick

+0

谢谢,我在给定的资源中找到了它:*如果用户稍后返回到已被杀死的应用程序,则Android需要以与上次看到的状态相同的状态重新启动它,以保留“所有应用程序都在运行”的体验。这是通过跟踪用户意识到的应用程序的部分(活动),并重新启动他们关于他们最近看到的状态的信息。* –

相关问题