【问题标题】:Android how to send message/object to an activity from an activity that was opened from a notificationAndroid如何从通知打开的活动向活动发送消息/对象
【发布时间】:2016-09-07 19:28:42
【问题描述】:

假设我有两个活动:

  1. MainActivity:显示存储在 SQLiteDB 中的项目列表
  2. NotificationActivity:用户可以向数据库添加项目的活动。

NotificationActivity 在用户点击通知时打开。接下来,用户将一个项目添加到数据库中,并且 NotificationActivity 被关闭。如何通知我的 MainActivity 添加了一个对象?

什么不起作用:

  • 我不能使用广播接收器,因为它在 Activity 暂停时未注册,这当然发生在我的 NotificationActivity 打开时。

  • 我无法使用startActivityForResult,因为 NotificationActivity 从通知中打开。

  • 我无法使用 MainActivity 的 onResume,因为我不会在每次恢复 MainActivity 时更新列表。

那么如何从通知打开的 NotificationActivity 向 MainActivity 发送消息/对象?

【问题讨论】:

  • 可以使用广播,不要从onpause注销
  • @Hulk,我认为应该始终取消注册 onPause 以防止 Activity has leaked IntentReceiver
  • 哦,好吧,那么您可以使用一个静态变量来告诉您是否添加了对象吗?这是有什么问题吗?

标签: android android-activity android-notifications


【解决方案1】:

查看您和@Hulk 之间的评论交流,您有以下选择:

  1. 使用BroadcastReceiver。你说需要注销receiver来防止“Activity has leaked IntentReceiver”。是的,您应该注销您的接收器,但您不需要在onPause() 中执行此操作。当您的Activity 被销毁时,您可以在onDestroy() 中执行此操作。 BroadcastReceiver 可以在您的Activity 还活着的时候保持积极的聆听。这里没有内存泄漏。

  2. 使用static(全局)变量,当NotificationActivity 对数据进行更改时,该变量设置为true。在MainActivity.onResume() 中,您可以检查此变量并相应地更新 UI。

【讨论】:

    【解决方案2】:

    如果您要实现的目标是使用从通知活动添加的新项目更新主活动中的 UI,并且您在活动中使用游标加载器和内容提供程序,请查看 Cursor.setnotificationuri() 的概念 What is cursor.setNotificationUri() used for?

    如果您在 ContentProvider 的查询 api 中启用 Cursor.setnotificationuri(),则在 ContentProvider 中更新、插入或删除期间的任何更改都会立即反映到 UI 中。

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      相关资源
      最近更新 更多