将消息发送到服务而不绑定它

Hun*_*unt 1 android android-service android-service-binding

我通过Service在 android 中扩展创建了一项服务,我正在Message使用Messenger和发送到服务Handler

但是问题(尽管这是一个常见的行为)是每当我必须向服务发送消息时,我都必须使用bind它,而当我停止活动时,我必须使用unbind它,这最终会破坏服务本身。

我可以通过边缘startService方法在后台继续运行服务,但是有什么方法可以在不使用的情况下将消息发送到服务,bind因为我不想在退出活动时破坏服务。

pet*_*tey 6

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