Android 如何将数据从IntentService发送到暂停的活动?
当活动位于前台时,下面的代码段可以工作。但是,当MainActivity处于后台时,MainActivity将无法接收广播 如何确保MainActivity始终接收广播?是否有其他方法将数据从IntentService发送到暂停的活动 在我的IntentService中,我像这样将数据发送回MainActivityAndroid 如何将数据从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
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。如何使用回调?任何示例?将其实现到活动中,并从该活动类在服务类构造函数中传递回调实例。在服务类中,使用此回调将数据发送到您在其中实现的活动。