私のアプリケーションは、スレッドを生成するサービスを起動します。スレッドは 5 秒ごとにいくつかのポーリングを行います。Android は、必要に応じてサービスを再起動できます。サービスが再起動されたときに既存のポーリング スレッドを使用できるように、ポーリング スレッドを保存しようとしています。
onStartCommand() メソッドは次のとおりです。
public int onStartCommand(Intent intent, int flags, int startId)
{
if(intent == null)
{
Log.d("screener", "onStartCommand was called with null intent. System must've killed and restarted service...?");
}
else
{
processToMonitor = intent.getStringExtra("com.screener.processToMonitor");
Log.d("screener", "onStartCommand was called");
}
if(pollThread == null)
{
poller = new Poller(this, wakeLock, processToMonitor);
pollThread = new Thread(poller);
pollThread.start();
Log.d("screenon", "polling thread was not already running. Going to start it");
}
else
{
Log.d("screener", "polling thread has already been running. Not going to restart it");
}
return START_STICKY;
}
渡された Intent オブジェクトが null の場合、これはサービスが再起動されたことを意味するため、このシナリオを正常に検出できます。保存したいオブジェクトは、ポーラー (またはポーラーをカプセル化する pollerThread) です。静的にしようとしましたが、うまくいきませんでした。また、アプリケーションをオーバーライドしてそこにインスタンスを保存しましたが、まだ永続化されていません。
では、サービスの再起動時にオブジェクトを保存するにはどうすればよいでしょうか? または、Android がすべてをクリーンアップし、単にスレッドを再起動することを受け入れますか?