有人能告诉我,从应用程序屏幕打开应用程序和从长按主页按钮时弹出的最近使用的应用程序列表中打开应用程序有什么区别?
我甚至不知道最近使用的列表存在,直到朋友设法通过从那里启动它来破坏我的应用程序。他试了两次并且退出了相同的力量,但是当他从应用程序屏幕启动它时,它打开了。
错误日志告诉我在我的ArrayView的ArrayAdaptor上的getCount方法中发生了nullPointerException。
无论如何,我只是想知道我是否需要了解并调整我的代码才能处理?
答案 0 :(得分:2)
AFAIK,如果您的应用程序完全关闭,从应用程序屏幕启动,最近使用的应用程序列表应该没有区别,刷新启动应用程序并打开应用程序的MainActivity(通过堆栈 - 将应用程序的MainActivity推送到新创建的任务中)
然而,由于Android是多任务操作系统,您的应用程序可以在待机模式下进入后台,即打开您的应用程序然后短按主页按钮,这与按下后退按钮不同。如果您还没有覆盖应用程序中按下的这些键,请按几次后退按钮,将所有活动从活动堆栈中弹出,最后终止您的应用程序,而按home键将系统的HomeActivity置于前台,从而翻转您的应用程序(AKA。任务与活动堆栈)到背景中。
这里的事情变得更加有趣,取决于您在AndroidManifest.xml中配置活动的android:launchMode的价值,如果您使用标准或单一顶部:
1.从最近使用的应用程序列表中启动应用程序始终将备用活动恢复到前台,即重新订购活动堆栈
2.从应用程序屏幕启动应用程序将创建MainActivity的新实例并打开它,即将新创建的MainActivity推送到活动堆栈中,因此现在您的应用程序的活动堆栈中有两个实例
如果您使用singleTask或singleInstance:
2.从应用程序界面启动应用程序将使用应用程序活动堆栈中的备用MainActivity(如果存在)并重新打开它,即重新订购活动堆栈。
结帐Tasks and Back Stack,了解不同的配置如何影响应用的活动堆栈行为。
答案 1 :(得分:1)
除了启动意图将设置FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY之外,活动从历史记录中发起的方式应该没有任何差异。
答案 2 :(得分:1)
我相信应该没有区别。这些是我在Android 2.3.4上按活动主页按钮时通常会看到的生命周期方法
onPause
onStop
然后当我使用图标或以前的应用程序导航回来时,我看到了
onRestart
onStart
onResume
现在,在某些情况下,系统会告诉您的活动在您离开时完成(或者如果发生方向更改,则立即返回)。然后,当您导航回来时,您会看到onDestroy
和以下内容
onCreate
onStart
onResume
我不认为这里有什么神秘的事情发生。根据{{3}},进程可以只有四个状态,并且这两个状态都属于后台活动。
答案 3 :(得分:0)
这是一种思考它的简单方法。您的所有活动都是从Intents启动的。按住主页按钮可以使用启动它的最后一个意图打开该活动。然而,这可以给你一些意想不到的结果。例如,如果您能够从像小部件这样的特殊事物中启动您的活动。