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

Android 如何将数据从IntentService发送到暂停的活动?,android,android-activity,Android,Android Activity,当活动位于前台时,下面的代码段可以工作。但是,当MainActivity处于后台时,MainActivity将无法接收广播 如何确保MainActivity始终接收广播?是否有其他方法将数据从IntentService发送到暂停的活动 在我的IntentService中,我像这样将数据发送回MainActivity Intent intent = new Intent(); intent.setAction(MY_SERVICE_RESULT); intent.putExtra(MY_SERVI

当活动位于前台时,下面的代码段可以工作。但是,当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);
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);
    }
  }
}
在我的活动中,我像这样使用广播接收器

Intent intent = new Intent();
intent.setAction(MY_SERVICE_RESULT);
intent.putExtra(MY_SERVICE_VALUE, "hello from service");
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
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);
    }
  }
}
如何确保MainActivity始终接收广播

你不能

但是,您可以通过将IntentService希望发送到MainActivity的数据临时存储在某个位置(例如SharedReferences)来解决此问题,并让MainActivity在onResume中检查该存储

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

*您可以使用应用程序的lifecyclecallbacks监视活动的状态,以查看某个活动是否正在运行,如果正在运行,则查看哪个活动正在运行

如何确保MainActivity始终接收广播

你不能

但是,您可以通过将IntentService希望发送到MainActivity的数据临时存储在某个位置(例如SharedReferences)来解决此问题,并让MainActivity在onResume中检查该存储

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


*您可以使用应用程序的lifecyclecallbacks来监视活动的状态,以查看某个活动是否正在运行,以及是哪个活动在运行。

您可以使用BroadCastReceiver来执行此操作,也可以使用Callback。@RahulSharma,我已经在使用BroadCastReceiver了。如何使用回调?任何示例?将其实现到活动中,并从该活动类在服务类构造函数中传递回调实例。在服务类中,使用此回调将数据发送到此已实现的活动。您可以使用BroadCastReceiver执行此操作,也可以使用回调。@RahulSharma,我已经在使用BroadCastReceiver。如何使用回调?任何示例?将其实现到活动中,并从该活动类在服务类构造函数中传递回调实例。在服务类中,使用此回调将数据发送到您在其中实现的活动。