我通过在Android中扩展Service
创建了一项服务,并使用Message
和Messenger
将Handler
发送给服务。
但是问题(这是一种常见的行为)是每当我必须向服务发送消息时我必须bind
它,当我退出活动时,我必须unbind
它最终破坏服务本身。
我可以通过边缘startService
方法继续在后台运行服务,但有没有办法在不使用bind
的情况下将消息发送到服务,因为我不想在我去的时候销毁服务没有活动了。
答案 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
即可发送数据!