我试图让android服务与外部设备通信。它工作得很好但我的UI完全冻结,直到服务结束他的工作。
这是我的服务代码:
//That method is execute the first and only the first time the service is bind
@Override
public void onCreate(){
super.onCreate();
Log.d("Service", "Creating service");
buildNotificationBarControls(radioStatus);
}
//this one is called on each bind
@Override
public IBinder onBind(Intent intent) {
Log.d("Service", "in onBind");
return mBinder;
}
这里我的服务连接(registercallback注册管理服务和活动之间通信的回调,DeviceManager与外部设备通信并发送信号与之前的回调:
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = GetDeviceServiceInterface.Stub.asInterface(service);
mBound = true;
try {
Log.d("Debug", "on connection try");
binder.registerCallback(mCallback);
binder.DeviceManager();
} catch (RemoteException e) {
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
mBound = false;
binder = null;
}
};
我将我的服务绑定到onResume:
getApplicationContext().bindService(new Intent(getApplicationContext(),GetDeviceService.class), mConnection, Context.BIND_ALLOW_OOM_MANAGEMENT);
随时为您服务,
答案 0 :(得分:0)
根据文件
A service runs in the main thread of the application that hosts it, by default
。
因此,尝试在线程或AsyncTask()中启动服务,使其在另一个线程中运行。
答案 1 :(得分:0)
默认情况下,普通服务在mainn UI线程中运行。您应该在服务中创建一个线程,或者使用IntentService。 IntentService在自己的线程中运行。
答案 2 :(得分:0)
通过在不同的线程中启动我的服务操作来解决它