我想制作一个可以启动前台服务的应用程序,以便随时检查哪些其他应用程序正在运行。
启动服务并在不同的线程中运行一些逻辑部分。创建了通知和计时器(循环),它们每100毫秒检查一次正在运行的应用程序。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
new Thread() {
public void run() {
startInForeground();
}
}.start();
return START_STICKY;
}
private void startInForeground() {
createNotification();
startTimer();
}
startTimer()函数在下面,用于检查任何应用程序在后台运行。一切都很好,我能够检测到哪个应用程序正在运行。
public void startTimer() {
ScheduledExecutorService scheduler = Executors
.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
checkAnyAppOpen();
}
}, 0, 100, TimeUnit.MILLISECONDS);
}
我担心的是-我必须无限次地运行 checkAnyAppOpen()函数。这样好吗?还是有其他方法可以处理它。 这种方法有什么影响?
我的第二个问题是-我可以停止服务,但计时器(计划程序)仍在连续运行。我怎样才能阻止它?如果它没有停止会如何影响它,因为我必须在可能运行5到24小时的一段时间后再次重新启动服务。我必须再次停止并重新启动。
谢谢
答案 0 :(得分:0)
scheduler.shutdown()
停止执行程序。