2017-07-29 11 views
0

私は周辺機器に接続し、その出力を聞くサービスを備えたAndroidアプリを持っています。周辺機器への接続は、サービスのonStartCommand()メソッドで開始されます。サービスの開始を中止する

接続の確立にはいくつかの「希望があります」があり、例外が発生すると失敗することがあります。

サービスが実行中のゾンビになるのを防ぐにはどうしたらいいですか? stopSelf()onStartCommand()から呼び出すと動作しないようです。

ラフコード:

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

関連する問題