相信我,在大型企业项目中,我尝试了许多第三方方法(服务总线、观察者等),结果发现原生Android机制是最快和最稳健的,因为它们利用了框架的优势。
这就是为什么我推荐使用LocalBroadcastManager和BroadcastReceiver。在您的活动(或每个片段中可以实现此操作!)中,在
onStart
中注册并在
onPause
中取消注册一个专用接收器。
在您的服务中使用LocalBroadcastManager与所有潜在订阅者进行通信。
示例:
public class YourActivity extends Activity{
private BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
}
};
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(){
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(INTENT_ACTION_UPLOAD));
}
}
在广播接收器的
onReceive
方法中,您可以根据接收到的广播执行所需的操作。如果您需要进一步区分,可以使用不同的操作或额外信息,例如在您的服务中:
...send(new Intent(INTENT_ACTION_SOMETHING_ELSE));
或者
send(new Intent(...).putExtra(WAS_SUCCESSFUL, false));
send(new Intent(...).putExtra(DOWNLOADED_CONTENT, downloadedStuff);