Hun*_*unt 1 android android-service android-service-binding
我通过Service在 android 中扩展创建了一项服务,我正在Message使用Messenger和发送到服务Handler。
但是问题(尽管这是一个常见的行为)是每当我必须向服务发送消息时,我都必须使用bind它,而当我停止活动时,我必须使用unbind它,这最终会破坏服务本身。
我可以通过边缘startService方法在后台继续运行服务,但是有什么方法可以在不使用的情况下将消息发送到服务,bind因为我不想在退出活动时破坏服务。
LocalBroadcastManager是发送消息/数据的好方法,
在您的服务类中,为意图操作名称创建一个私有广播接收器和字符串:
public static String MSERVICEBROADCASTRECEIVERACTION ="whatevs";
private BroadcastReceiver mServiceBroadcastReceiver= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("foo","onReceive called");
Log.d("foo","extra = " + intent.getStringExtra("foo")); // should print out " extra = bar"
}
};
Run Code Online (Sandbox Code Playgroud)
并将其注册到您的 onCreate
@Override
public void onCreate() {
// your other code...
LocalBroadcastManager.getInstance(this).registerReceiver(mServiceBroadcastReceiver, new IntentFilter(ServiceClassName.MSERVICEBROADCASTRECEIVERACTION));
}
Run Code Online (Sandbox Code Playgroud)
并在 onDestroy() 中取消注册
@Override
public void onDestroy() {
// your other code...
LocalBroadcastManager.getInstance(this).unregisterReceiver(mServiceBroadcastReceiver);
}
Run Code Online (Sandbox Code Playgroud)
至于从活动或片段向它发送消息:
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
Intent intent = new Intent(ServiceClassName.MSERVICEBROADCASTRECEIVERACTION);
// add some data
intent.putExtra("foo","bar");
lbm.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
HTH,您无需发送数据即可bind!
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |