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

时间:2013-10-23 07:09:25

标签: 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);

我使用此代码在我的活动中接收广播:

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()中取消注册接收器。
我是否必须做任何事情来彻底删除广播,或者我必须学会与之共处?

1 个答案:

答案 0 :(得分:1)

即使你的应用程序消失,粘性广播仍然存在。摆脱它们的唯一可靠方法是通过手机重启。你不能手动让它自己消失。这是粘性广播的预期行为。它应该坚持下去,以便任何注册自己接收此广播的应用程序都应该接收最新的广播缓存版本,即使原始应用程序已经死亡也不复存在。如果你想要没有这种行为的东西,那么只需使用常规广播。

进一步阅读: