2017-07-29 97 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