0

我创建了一个应用程序。它启动一个服务(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 来重新启动线程?

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

请让我知道是否有这样做的典型方法或任何好主意?提前致谢。

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

4

2 回答 2

1

完成您尝试做的事情的最佳方法是使用 ClipboardManager 类,始终尽量避免使用您自己的“监控”功能,特别是当它已经存在于操作系统中时,并确保操作系统本身是否已经提供了触发广播接收器采取任何你所期望的行动,看看这个类的文档:

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

与其让线程无所事事,消耗电池和性能,不如创建一个等待剪贴板操作的广播接收器,使用以下方法:

ClipboardManager.addPrimaryClipChangedListener(ClipboardManager.OnPrimaryClipChangedListener what)

通知任何更改...

问候!

于 2013-06-17T18:08:42.713 回答
0

这里面:http: //developer.android.com/guide/components/services.htmlExtending the Service class will帮你!

于 2013-06-17T17:16:47.240 回答