android,如何保持线程在服务中运行?

时间:2013-06-17 17:06:05

标签: android multithreading service

我创建了一个应用。它启动一个服务(onStartCommand类型)。 它创建了一个监视剪贴板的线程:

private class MonitorTask extends Thread {
    @Override
    public void run() {
        mKeepRunning = true;
        while (true) {
            doTask(); //-this function uses the toast to show the string in clipboard
            try {
                Thread.sleep(300);
            } catch (InterruptedException ignored) {
            }
            if (!mKeepRunning) {
                break;
            }
        }
    }

我发现经过一段时间后,服务仍然存在(根据正在运行的服务管理器),但线程消失了。如何在用户关闭应用程序之前保持线程永久运行。

我猜可能是InterruptedException,我怎么能用catch来重启Thread?

一些旧线程提到使用AlarmManager定期“启动服务并做某事,关闭服务”,但我不认为这是个好主意?

如果有一种典型的方式或任何好主意,请告诉我?提前谢谢。

更新 事实上,我知道有ClipboardManager,但我知道这个与android 2.3.4不兼容。此外,我想知道我是否想要在服务中创建一个线程,如果它被杀死了怎么能重置呢?感谢

2 个答案:

答案 0 :(得分:1)

完成你要做的事情的最好方法是使用ClipboardManager类,总是尽量避免让你拥有“监控”功能,特别是当它已经存在于操作系统中时,并确保操作系统本身已经提供了BroadcastReceiver使用您期望的任何内容触发操作,请查看此类的文档:

http://developer.android.com/reference/android/content/ClipboardManager.html

不要让线程无所事事,耗尽电池和性能,为什么不创建BroadcastReceiver等待剪贴板操作,请使用该方法:

ClipboardManager.addPrimaryClipChangedListener(ClipboardManager.OnPrimaryClipChangedListener what)

通知任何变更......

问候!

答案 1 :(得分:0)

在其中:http://developer.android.com/guide/components/services.htmlExtending the Service class will帮助你!