Android 即使使用singleInstance、singleTask和noHistory=true运行活动的多个实例
我的应用程序有聊天活动。注册用户可以将消息(聊天)发送给其他用户。 我面临的问题是,似乎每次打开聊天活动时,都会创建一个新的活动实例。 首次打开聊天活动后,聊天效果良好。 然后返回到上一个活动。 然后打开聊天活动,收到的消息会显示两次。 第三次打开聊天活动后,收到的消息将显示三次。 打开聊天活动的次数与显示消息的次数完全匹配。此数字还与在该活动中调用Log.e的次数相匹配Android 即使使用singleInstance、singleTask和noHistory=true运行活动的多个实例,android,kotlin,android-activity,duplicates,instance,Android,Kotlin,Android Activity,Duplicates,Instance,我的应用程序有聊天活动。注册用户可以将消息(聊天)发送给其他用户。 我面临的问题是,似乎每次打开聊天活动时,都会创建一个新的活动实例。 首次打开聊天活动后,聊天效果良好。 然后返回到上一个活动。 然后打开聊天活动,收到的消息会显示两次。 第三次打开聊天活动后,收到的消息将显示三次。 打开聊天活动的次数与显示消息的次数完全匹配。此数字还与在该活动中调用Log.e的次数相匹配 if(receiver_id != null && receiver_id != "")
if(receiver_id != null && receiver_id != "") {
val intent = Intent(this, ViewMessageActivity::class.java).apply {
putExtra(Constants.RECEIVER_ID, receiver_id)
putExtra(Constants.MY_ID, Constants.myID)
}.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK )
.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
}
我在AndroidManifest.xml中尝试了以下内容
android:launchMode="singleInstance"
android:launchMode="singleTask"
android:launchMode="singleTop"
android:noHistory="true"
在开始活动时,我也尝试了以下方法
if(receiver_id != null && receiver_id != "") {
val intent = Intent(this, ViewMessageActivity::class.java).apply {
putExtra(Constants.RECEIVER_ID, receiver_id)
putExtra(Constants.MY_ID, Constants.myID)
}.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK )
.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
}
以上这些都不适合我
接收到的消息将插入房间数据库。
非常奇怪的是,如果我在DB中打印消息,新收到的消息将插入活动打开的次数。
然后,在返回到上一个活动并再次打开该活动后,插入多次的消息就消失了,只有一次例外。就是
Suppose the following are the messages in the DB.
message1 - message2 - message3
Then back to the previous activity, and opening the activity again and receiving message4.
message1 - message2 - message3 - message4 - message4
Then back to the previous activity, and opening the activity again and receiving message5.
message1 - message2 - message3 - message4 - message5 - message5 - message5
有人知道为什么吗
非常感谢您提前给出的所有答案。我找到了原因。
由于在销毁活动时忘记注销BroadcastReceiver,已多次添加聊天信息。
随后,他解决了这个问题
override fun onDestroy() {
super.onDestroy()
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver)
}