如何将数据从IntentService发送到暂停的活动?

时间:2016-09-14 15:03:51

标签: android android-activity

当活动位于前台时,下面的代码段会起作用。但是,当MainActivity处于后台时,MainActivity将无法接收广播。

如何确保MainActivity始终接收广播?有没有其他方法可以将数据从IntentService发送到暂停的活动?

在我的IntentService中,我将数据发送回MainActivity,就像这样

Intent intent = new Intent();
intent.setAction(MY_SERVICE_RESULT);
intent.putExtra(MY_SERVICE_VALUE, "hello from service");
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);

在我的活动中,我像这样使用BroadcastReceiver

public class MainActivity extends AppCompatActivity{

  BroadcastReceiver receiver;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    receiver = new BroadcastReceiver(){
      @Override
      public void onReceive(Context context, Intent intent) {
        String value = intent.getStringExtra(MY_SERVICE_VALUE);
      }
    };

    @Override
    protected void onResume() {
      super.onResume();
      IntentFilter intentFilter = new IntentFilter();
      intentFilter.addAction(MY_SERVICE_RESULT);
      LocalBroadcastManager.getInstance(this).registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onPause() {
      super.onPause();
      LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

  

如何确保MainActivity始终接收广播?

你不能。

但是,您可以通过将IntentService想要临时发送到MainActivity的数据(例如SharedPreferences)存储起来来解决它,并让MainActivity检查onResume中的存储。

可能的情况
IntentService做了它的事情。检查MainActivity是否处于活动状态*。如果是 - >发送广播。如果不是 - >存储在某处,让MainActivity检查onResume中的存储。

*您可以使用应用程序的生命周期回溯来监视活动的状态,以查看活动是否正在运行以及是否正在运行。