如何将数据从IntentService发送到已暂停的活动?
问题描述:
当活动位于前台时,下面的代码片段可以工作。但是,当MainActivity处于后台时,MainActivity将无法接收广播。如何将数据从IntentService发送到已暂停的活动?
如何确保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);
}
}
}
答
如何确保MainActivity会一直收到广播吗?
你不行。
但是,您可以通过存储IntentService想要临时发送到MainActivity的数据(例如SharedPreferences)来解决此问题,并让MainActivity检查onResume中的存储。
可能的情况
IntentService做它的事情。检查MainActivity是否活动*。如果是 - >发送广播。如果不是 - >存储在某处,并让MainActivity检查onResume中的存储。您可以使用应用程序的生命周期回收来监视活动的状态,以查看活动是否正在运行以及是否正在运行。
您可以使用** BroadCastReceiver **来完成此操作,也可以使用** Callback **。 –
@RahulSharma,我已经在使用BroadcastReceiver了。我如何使用回拨?任何示例? –
将其实施到您的活动中,并从此活动类的服务类构造函数中传递回调实例。并且在服务类中使用此回调将数据发送到您已实施的此活动。 –