当活动位于前台时,下面的代码段会起作用。但是,当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);
}
}
}
答案 0 :(得分:0)
如何确保MainActivity始终接收广播?
你不能。
但是,您可以通过将IntentService想要临时发送到MainActivity的数据(例如SharedPreferences)存储起来来解决它,并让MainActivity检查onResume中的存储。
可能的情况
IntentService做了它的事情。检查MainActivity是否处于活动状态*。如果是 - >发送广播。如果不是 - >存储在某处,让MainActivity检查onResume中的存储。
*您可以使用应用程序的生命周期回溯来监视活动的状态,以查看活动是否正在运行以及是否正在运行。