相信我,我在大型企业项目中尝试了很多第三方方法(服务总线、观察器等),结果证明原生 Android 机制是最快和最强大的,因为它们利用了框架的好处。
这就是为什么我建议将 LocalBroadcastManager 与 BroadcastReceiver 一起使用。在您的活动(或您的活动中按片段执行此操作!)在onStart 中注册并在onPause 中取消注册专用接收器。
在您的服务中使用 LocalBroadcastManager 与所有潜在订阅者进行通信。
例子:
public class YourActivity extends Activity{
private BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//...do the stuff you need to do depending on the received broadcas
}
};
private IntentFilter filter = new IntentFilter(UploadService.INTENT_ACTION_UPLOAD);
protected onStart(){
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter);
}
protected onPause(){
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
}
}
public class UploadService extends IntentService{
public static final String INTENT_ACTION_UPLOAD = "com.your.package.INTENT_ACTION_UPLOAD";
public onHandleIntent(){
//upload
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(INTENT_ACTION_UPLOAD));
}
}
在 BroadcastReceiver 的onReceive中,您可以根据收到的广播执行您需要执行的操作。如果您需要更多区别,可以使用不同的操作或附加功能,例如在您的服务中:
...send(new Intent(INTENT_ACTION_SOMETHING_ELSE));
或
send(new Intent(...).putExtra(WAS_SUCCESSFUL, false));
send(new Intent(...).putExtra(DOWNLOADED_CONTENT, downloadedStuff);