Android服务冻结活动

时间:2014-06-20 07:56:47

标签: android service

我试图让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);

随时为您服务,

3 个答案:

答案 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)

通过在不同的线程中启动我的服务操作来解决它