我的应用程序启动了一个产生线程的服务。该线程每 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)。我已经尝试将其设为静态但不起作用。我还覆盖了 Application 并在其中存储了一个实例,但它仍然没有持久化。
那么,当服务重新启动时,我如何存储我的对象呢?或者,我是否接受 Android 清理所有内容并简单地重新启动线程?