android - 使用长按 Home 键时,android 2.1 中 ActivityManger 中的错误

标签 android android-activity dialog popup version

在我的一项服务中,我触发了一个事件,该事件在状态栏中放置了一个通知,其中包括一个待处理的 Intent ,以便在用户单击通知时启动 Activity 。

我开始的 Activity 实际上是一个“弹出窗口”,其主题是 list 中定义的对话框弹出窗口 (android:theme="@android:style/Theme.Dialog") .待定 Intent 的代码如下:

Intent intent = new Intent(this, PopupWindow.class);
PendingIntent launchIntent = PendingIntent.getActivity(context, 0 , intent, 0);

notificationManager.notify(notificationRef, notification);

在android 2.2 中一切正常,但在android 2.1 中测试时,新启动的弹出窗口不会聚焦在屏幕上。

我知道 Activity 正在启动,因为如果我按住主屏幕按钮以调出最近启动的应用程序,“弹出窗口”将神奇地出现并获得焦点。

我在这里缺少什么吗?为什么我的代码在 android 2.2 而不是 2.1 中工作?

最佳答案

经过一天的调试,我发现从待定 Intent (堆栈中的 Activity B)启动的新 Activity 会在 ActivityManager 中的某处丢失,要么在已经打开的 Activity(Activity A)后面,要么可能在最近的窗口后面打开的应用程序(长按主页键)。

只有在 android < 2.1 版本中长按主页键离开 Activity A 时才会发生这种情况。离开 Activity A 的所有其他实例(home 键短按、后退键按下)将允许 Activity B 上的未决 Intent 打开并将焦点置于屏幕上的所有内容之上。在 android 2.2 及更高版本中,代码可以正常工作,没有任何问题。很奇怪。更奇怪的是,如果我将 Toast 消息放在 Activity A 的 onRestart 方法中显示,问题就完全消失了。 Activity A 的 onPause 方法内部也没有发生任何奇怪的事情......我仍然不知道。

我尝试了 Activity B 的未决 Intent 的几乎所有标志,但没有一个会允许弹出窗口到达 Activity 堆栈的顶部......我认为 Nanne 和 willytate 让我走上了正确的轨道...... .

我放弃了在服务内部设置挂起 Intent 的方法,我认为它破坏了 Activity A 和 Activity B 之间的亲和性。当我在 Activity A 内部为 Activity B 设置挂起 Intent 时,在后台运行的服务,Activity B(通过 list 中的 android:theme="@android:style/Theme.Dialog"以弹出窗口的形式)将始终出现在堆栈的顶部。

再一次,这种对 Activity 的“注意力不集中”只在这个过程中发生在我身上:

  1. 安卓 2.1
  2. 启动 Activity A
  3. 使用服务设置状态栏通知以启动 Activity B 的未决 Intent
  4. 长按主页键离开 Activity 转到任何其他应用程序。
  5. 服务在状态栏中触发通知以启动 Activity B。
  6. 点击通知打开 Activity B。
  7. 作为对话框创建的 Activity B 无处可寻,Activity A 到达堆栈的停止位置,但仍处于暂停状态。 Activity A 上的用户触摸根本没有响应,并且显示的计时器没有移动。 Activity 可能卡在了 onPause 中?

让 Activity B 出现的唯一方法是再次长按主页键。完成此操作后,我在屏幕上看到以下内容,按降序排列,第一个位于堆栈顶部以供用户输入:

  1. 最近使用的应用列表。
  2. Activity B。
  3. Activity A.

按下后退按钮关闭最近使用的应用程序列表将允许 Activity B 接收用户输入,然后一切正常运行。

如果这不是完全浪费时间的话,我确实对 Android 如何处理应用程序堆栈有了更好的理解。

其他人(如果他们真的想)可以重现这个问题吗?

关于android - 使用长按 Home 键时,android 2.1 中 ActivityManger 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145978/

相关文章:

java - 安卓开发: Combining two Java files

android - 如何在 Android 中使用 TextWatcher 类?

启用 proguard 时 Android 构建失败

java - 错误 : Failed to resolve: androidx. annotation.annotation :1. 1.0:受影响的模块:app

android - 从 Android 中的 Intent 中检索调用 Activity

android - 如何在同一屏幕上显示 map View 和 ListView ?

android - 如何实现 'first-use'/教程 Activity

flutter - Flutter/Dart:无法调用窗口小部件方法

android - 显示android时避免键盘拉动 Activity 布局

jquery UI 对话框默认第一个按钮样式