我有一个活动和一个粘性服务。Activity 需要根据 Sticky Service 的值在其 UserInterface 中显示一些值。因此,每当服务更改他的数据时,活动都需要更新它的用户界面。但是服务应该如何通知活动来改变它的值呢?
请提醒活动有时不活跃,只有服务是粘性的。
我有一个活动和一个粘性服务。Activity 需要根据 Sticky Service 的值在其 UserInterface 中显示一些值。因此,每当服务更改他的数据时,活动都需要更新它的用户界面。但是服务应该如何通知活动来改变它的值呢?
请提醒活动有时不活跃,只有服务是粘性的。
使用本地广播
在您的服务类别中:
public class LocalMessage extends IntentService{
private Intent broadcast;
public static final String BROADCAST = "LocalMessage.BROADCAST";
public LocalMessage(String name) {
super(name);
broadcast = new Intent(name);
}
@Override
protected void onHandleIntent(Intent intent) {
if (broadcast != null) LocalBroadcastManager.getInstance(context).sendBroadcast(broadcast);
}
}
这是服务内广播的方法
private void sendLocalMessage(){
(new LocalMessage(LocalMessage.BROADCAST)).onHandleIntent(null);
}
在您的活动中:
private void registerBroadcastReciever() {
IntentFilter filter = new IntentFilter(YourService.LocalMessage.BROADCAST);
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(receiver, filter);
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//doSmth
}
};
在您的活动 onDestroy() 方法中取消注册接收器;