2017-07-29 18 views
0

我有一个连接到外围设备并监听其输出的服务的Android应用程序。与外设的连接在服务的onStartCommand()方法中启动。中止服务启动

建立连接涉及到几个“希望”,有时可能会失败并产生异常。

如何防止服务成为运行中的僵尸,但没有连接来监视?从onStartCommand()中调用stopSelf()似乎不起作用。

粗糙代码:

public int onStartCommand(Intent intent, int flags, int startId) { 
    try { 
     // connect to device 
    } catch (ConnectToDeviceException e) { 
     stopSelf(); 
    } 
    return START_REDELIVER_INTENT; 
} 

回答

1

我通过移动连接代码为AsyncTask并从那里如果连接失败停止服务解决它。

由于onStartCommand()在UI线程上运行并连接到设备可能需要一些时间,因此将UI线程置于AsyncTask之后会变得更清洁。

简化代码:

public int onStartCommand(Intent intent, int flags, int startId) { 
    StartupTask startupTask = new StartupTask(); 
    startupTask.execute(); 
    return START_REDELIVER_INTENT; 
} 

private class StartupTask extends AsyncTask<Void, Void, Void> { 
    boolean success = true; 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      // connect to device 
     } catch (ConnectToDeviceException e) { 
      success = false; 
     } 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if (!success) 
      stopSelf(); 
    } 
} 
+0

高兴你能够解决您的问题。你能否接受你的回答,使问题明显得到解决? – Gary99

+0

完成(有48小时的等待期)。 – user149408

+0

是的,我刚刚在几天前了解到这一点。 – Gary99