我创建了一个应用。它启动一个服务(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不兼容。此外,我想知道我是否想要在服务中创建一个线程,如果它被杀死了怎么能重置呢?感谢
答案 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.html,Extending the Service class will
帮助你!