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

时间:2014-03-28 12:59:21

标签: android android-service android-service-binding

我通过在Android中扩展Service创建了一项服务,并使用MessageMessengerHandler发送给服务。

但是问题(这是一种常见的行为)是每当我必须向服务发送消息时我必须bind它,当我退出活动时,我必须unbind它最终破坏服务本身。

我可以通过边缘startService方法继续在后台运行服务,但有没有办法在不使用bind的情况下将消息发送到服务,因为我不想在我去的时候销毁服务没有活动了。

2 个答案:

答案 0 :(得分:0)

Unbind Service不会破坏该服务。它将断开活动和服务之间的服务连接

确保您返回START_STICKY以保持服务正常运行

 @Override
public int onStartCommand(Intent intent, int flag, int startId)
{
    return START_STICKY;
}

还要确保将服务作为前台运行 在从堆栈中删除应用程序后,使用通知继续运行服务。

startForeground(1000,mBuilder.build());  // mBuilder - notification builder 

答案 1 :(得分:0)

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"

    }
};

并在onCreate

中注册
@Override
public void onCreate() {
        // your other code...
         LocalBroadcastManager.getInstance(this).registerReceiver(mServiceBroadcastReceiver, new IntentFilter(ServiceClassName.MSERVICEBROADCASTRECEIVERACTION));
    }

并在onDestroy()

中取消注册
@Override
public void onDestroy() {
        // your other code...
         LocalBroadcastManager.getInstance(this).unregisterReceiver(mServiceBroadcastReceiver);
    }

至于从活动或片段向其发送消息:

    LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
    Intent intent = new Intent(ServiceClassName.MSERVICEBROADCASTRECEIVERACTION);
    // add some data 
    intent.putExtra("foo","bar");
    lbm.sendBroadcast(intent);

HTH您无需bind即可发送数据!