如何将数据从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); 
    } 
    } 
} 
+0

您可以使用** BroadCastReceiver **来完成此操作,也可以使用** Callback **。 –

+0

@RahulSharma,我已经在使用BroadcastReceiver了。我如何使用回拨?任何示例? –

+0

将其实施到您的活动中,并从此活动类的服务类构造函数中传递回调实例。并且在服务类中使用此回调将数据发送到您已实施的此活动。 –

如何确保MainActivity会一直收到广播吗?

你不行。

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

可能的情况
IntentService做它的事情。检查MainActivity是否活动*。如果是 - >发送广播。如果不是 - >存储在某处,并让MainActivity检查onResume中的存储。您可以使用应用程序的生命周期回收来监视活动的状态,以查看活动是否正在运行以及是否正在运行。