【问题标题】: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
【问题描述】:
  • 重现问题的步骤。

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

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

  • 应该是正确的行为。

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

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

【问题讨论】:

  • 我检测到应用程序首次运行的情况并重新启动它。 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);返回; }

标签: android operating-system installation


【解决方案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。

【讨论】:

【解决方案2】:

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

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

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

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

编辑

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

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

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

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

...

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

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

【讨论】:

  • 但应用程序在应用程序重新启动后或如果您在应用程序中按“返回”按钮返回主屏幕后,应用程序会以正常方式保留活动。
  • 应用重启后一切正常。
  • 与原来的问题相比,我不明白你在这里说什么......“应用程序重启后”是什么意思?你是怎么退出申请的?
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 2014-06-25
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多