将数据从Application传递给Activity

时间:2016-05-21 13:17:20

标签: android events android-activity

我的android应用程序类实例正在侦听该事件的第三方服务。然后事件即将发布,我需要注意我的活动。这样做的正确方法是什么? 我知道startActivity()方法,但我的Activity还在运行!

2 个答案:

答案 0 :(得分:1)

如果您的应用是本地通信,则可以使用local broadcasts

对于组件之间的通信,您还可以使用EventBus(Android-library)。它非常易于使用和实现(只需不到一分钟的时间就能理解它的工作原理)并且性能很好。

答案 1 :(得分:1)

将本地广播事件与LocalBroadcastManager一起使用 - 有关详细信息,请参阅此tutorial

为方便起见,我已经从上面的教程中复制了相关的代码。

要通知您已经开展的有关活动的活动,请尝试以下操作:

  1. 收到活动时,从您的Application类发送广播意图。

    Intent intent = new Intent("my-event");
    // add data
    intent.putExtra("message", "data");
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    
  2. 在您的Activity中注册一个BroadcastReceiver,它将处理您收到的事件Intent。将以下代码添加到您的活动:

    @Override 
    public void onResume() {
      super.onResume();
    
      // Register mMessageReceiver to receive messages.
      LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("my-event"));
    }
    
    // handler for received Intents for the "my-event" event 
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        // Extract data included in the Intent
        String message = intent.getStringExtra("message");
        Log.d("receiver", "Got message: " + message);
      }
    };
    
    @Override
    protected void onPause() {
      // Unregister since the activity is not visible
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
      super.onPause();
    }