如果第一次从 App Manager 运行应用程序,为啥 Android 在按下 Home 按钮后不保留应用程序状态?

Posted

技术标签:

【中文标题】如果第一次从 App Manager 运行应用程序,为啥 Android 在按下 Home 按钮后不保留应用程序状态?【英文标题】:Why does not Android retain application state after pressing Home button if application is ran first tyme from App Manager?如果第一次从 App Manager 运行应用程序,为什么 Android 在按下 Home 按钮后不保留应用程序状态? 【发布时间】:2011-10-01 10:46:29 【问题描述】:

重现问题的步骤。

    创建或下载任何包含多个活动的应用程序。 将 apk 文件加载到 sdcard 或从市场安装。 使用标准应用管理器安装应用。 在应用管理器中安装后按打开或下载后按通知消息。 应用程序运行后,转到下一个(第二个)应用程序屏幕。 按主页。 按应用程序图标。

发生了什么。

应用程序正在从第一个屏幕重新启动,并且不保留第二个屏幕。 应用程序重新启动后或在应用程序中按“返回”按钮返回主屏幕后,应用程序会以正常方式保留活动。

应该是正确的行为。

应用程序必须始终以正常方式保留活动。

如何为我的应用程序解决这个问题? 我可以在首次运行时重新启动应用程序吗?

【问题讨论】:

我检测到应用程序首次运行的情况并重新启动它。 if (first_run) Log.w(TAG, AppHelper.FIRST_RUN); PendingIntent 意图 = PendingIntent.getActivity(this.getBaseContext(), 0, (new Intent(getIntent())).addCategory(Intent.CATEGORY_LAUNCHER), Intent.FLAG_ACTIVITY_NEW_TASK); AlarmManager mgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, 意图); System.runFinalizersOnExit(true); System.exit(2);返回; 【参考方案1】:

我认为 App Manager 以错误的方式运行我的应用程序。它在其任务中运行我的应用程序。当我按下 HOME 并按下应用程序图标时,我会使用我的应用程序运行第二个任务。

我测试过了。我做了两个应用程序App1,App2。 App2 有两个活动 A 和 B。 App1 以最简单的方式运行 App2。

Intent intent = new Intent(Intent.ACTION_RUN);
intent.setComponent(new ComponentName("org.app2.test", "org.app2.test.Screen1"));

测试 1. 运行 App1。 App1 运行 App2 活动 A。活动 A 运行活动 B。 按主页。按 App2 图标。可以看到 App2 活动 A。

我更改了启动 App2 的代码。

Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName("org.app2.test", "org.app2.test.Screen1"));

测试 2. 运行 App1。 App1 运行 App2 活动 A。活动 A 运行活动 B。 按主页。按 App2 图标。您可以看到 App2 活动 B。

【讨论】:

相关问题***.com/questions/6649685/…【参考方案2】:

取决于应用程序在清单文件中是如何定义的,以及它是否有任何机制来保存和恢复其状态......

根据您的步骤,它可能会创建同一应用程序的多个实例(检查this)

或者它没有使用onCreate中的实例Bunble

绝对不会让所有应用程序自动返回到它被暂停或销毁时的保存屏幕(某些应用程序不希望这样,想想你的银行账户管理......)

编辑

因此,如果我从您的 cmets 中正确理解,当您使用 BACK 键退出应用程序时,它可以正常工作,但在您使用 HOME 键时不会...

阅读我发布的链接:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

您会明白,当您按下 HOME 键时,您所在的应用程序实例不会被破坏(因此当前状态不会被保存)。再次启动它只会启动另一个实例(从初始屏幕开始)。

当用户按下 BACK 键时, 当前活动被破坏并且 上一个活动继续。

...

任务是一个有凝聚力的单元,可以 当用户移动到“后台” 开始一项新任务或前往主页 屏幕,通过 HOME 键

如果您想更改其行为方式,请查看清单中的 launchMode

【讨论】:

但应用程序在应用程序重新启动后或如果您在应用程序中按“返回”按钮返回主屏幕后,应用程序会以正常方式保留活动。 应用重启后一切正常。 与原来的问题相比,我不明白你在这里说什么......“应用程序重启后”是什么意思?你是怎么退出申请的?

以上是关于如果第一次从 App Manager 运行应用程序,为啥 Android 在按下 Home 按钮后不保留应用程序状态?的主要内容,如果未能解决你的问题,请参考以下文章

更改 Context.xml 后的 Tomcat Manager App 404

flask数据库的迁移

CLLocation Manager 检查 requestAlwaysAuthorization 如果不接受退出应用

在装oracle 11g的时候出现 由于以下错误,Enterprise Manager 配置失败:

需要从 appdelegate 加载 UIViewController 并在 Storyboard App 中加载时隐藏 UITabBarController

关于tomcat manager app 404错误的解决