0

我的应用程序启动了一个产生线程的服务。该线程每 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 清理所有内容并简单地重新启动线程?

4

1 回答 1

0

为什么要存储线程?让它“死”,一旦你的服务重新启动,一个新的轮询线程将启动。

于 2012-11-29T04:40:02.190 回答