Java 如何从内存中删除粘性广播?

Java 如何从内存中删除粘性广播?,java,android,broadcast,Java,Android,Broadcast,我正在从我的服务发送一个粘性广播,我在我的一个活动中收到它。我使用以下代码发送广播: Intent i = new Intent(); i.setAction("presence"); i.putExtra("name",xmlContactName); i.putExtra("fullname", xmlContactName.split("@")[0]); i.putExtra("presence", presence); sendStickyBroadcast(i); 我在活动中使用此

我正在从我的服务发送一个粘性广播,我在我的一个活动中收到它。我使用以下代码发送广播:

Intent i = new Intent();
i.setAction("presence");
i.putExtra("name",xmlContactName);
i.putExtra("fullname", xmlContactName.split("@")[0]);
i.putExtra("presence", presence);

sendStickyBroadcast(i);
我在活动中使用此代码接收广播:

receiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if(action.equalsIgnoreCase("presence")){
      Contact c = new Contact();
      Bundle contact = intent.getExtras();
      c.name = contact.getString("name");
      c.fullName = contact.getString("fullname");
      c.presence = contact.getString("presence");

      removeStickyBroadcast(intent);
    }
  };
}
根据几篇帖子,我发现这就是我所需要做的,据我所知,当我的应用程序还在运行时,这个意图不会再次发送到活动中。然而,当我关闭应用程序并再次运行它时,即使没有从我的服务发送广播,我也会在活动中获得广播。似乎广播仍在某处徘徊,重启应用程序后会再次收到广播。到目前为止,我唯一能摆脱它的方法就是重启手机。我也在我的活动的onDestroy()中注销接收者。

我是否需要做些什么才能完全删除广播,还是我必须学会忍受它?

即使在你的应用程序消失后,粘性广播仍会继续存在。摆脱它们的唯一可靠方法是重启手机。你不能自己手动让它消失。这是粘性广播的预期行为。它应该保持不变,以便任何注册自己以接收此广播的应用程序都应该接收广播的最新缓存版本,即使源应用程序已死亡或消失。如果你想要一些没有这种行为的东西,那么就使用常规广播

进一步阅读:


但如果我使用常规广播,则在发送时我的活动未激活时,广播不会到达。我有一个联系人列表,如果它不处于活动状态,当它处于活动状态时,它仍应接收广播。这可以使用常规广播吗?如果是这样的话,请考虑使用本地DB来代替。将日期写入服务中的本地数据库。每次活动激活时,检查本地数据库是否有新数据,如果有,则检索它。这将满足您的要求,并提供更高的安全性,因为只有您的应用程序可以访问您的本地数据库,而不是任何应用程序都可以访问的广播。感谢您的提示,这确实是一个更好的解决方案。