Android 即使使用singleInstance、singleTask和noHistory=true运行活动的多个实例

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 != "")

我的应用程序有聊天活动。注册用户可以将消息(聊天)发送给其他用户。 我面临的问题是,似乎每次打开聊天活动时,都会创建一个新的活动实例。 首次打开聊天活动后,聊天效果良好。 然后返回到上一个活动。 然后打开聊天活动,收到的消息会显示两次。 第三次打开聊天活动后,收到的消息将显示三次。 打开聊天活动的次数与显示消息的次数完全匹配。此数字还与在该活动中调用Log.e的次数相匹配

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)
}