Java Android : How to force only one instance of an app (singleTop not working correctly)?

标签 java android android-intent android-manifest instance

我是 Android Java 编程新手。

我创建了一个简单的聊天应用程序。事情进展顺利,但我遇到了一个小障碍。我已在 list 的应用程序标记中设置 launchMode="singleTop",并覆盖后退按钮,因此现在当用户按下后退或主页按钮时,聊天应用程序仍保持运行(在后台)。我还创建了一些通知,当出现新聊天时(设置了intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)),这些通知会在状态栏中弹出,当用户单击通知时,它会带来已经运行的聊天应用程序到前面。一切正常;当我从状态栏通知中调出应用程序,然后单击“返回”或“主页”,然后选择从应用程序菜单或启动器上的快捷方式打开应用程序时,就会出现问题,此时它会打开应用程序的第二个实例。

清楚了吗?

如果应用程序未运行并且我选择从应用程序菜单运行它,它就会运行(不显示任何聊天,因为它没有收到任何聊天)。我收到聊天并在应用程序的屏幕上看到它,我按后退按钮,我返回并通过应用程序菜单打开应用程序,它运行并包含之前的聊天消息。好的。现在我按返回(因此应用程序在后台,但仍在运行),我收到一条聊天,它会弹出一个状态栏通知,我单击它,它会打开应用程序并显示之前的聊天消息。好的。现在我单击“返回”(因此应用程序正在后台运行)。然后我通过应用程序菜单打开应用程序(就像我第一次和第二次一样),但是这次它不显示以前的聊天消息,如果我收到聊天,它会发出 2 声通知声音,所以我知道已启动应用程序的新实例。

知道出了什么问题吗?

谢谢。

最佳答案

在 list 中将 Activity launchMode 设置为 singleInstance。

关于Java Android : How to force only one instance of an app (singleTop not working correctly)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131063/

相关文章:

java - 对象(输出|输入)流二进制协议(protocol)

java - 如何获取调用堆栈元素 *没有* arg 签名的方法实例?

Android Google Map v2 - 将标记移动到点击位置并更新地理坐标

android - 使应用程序在视频通话期间接受语音命令

java - 从android中的String Arraylist访问drawable文件

Android 在 NFC 标签上多次启动 Activity

android - 永久修改启动 Activity 的 Intent

java - ArrayList 删除第一个元素

JavaFX 屏幕分辨率缩放

Android - 使用 FLAG_ACTIVITY_NEW_TASK