【发布时间】:2018-09-13 23:51:09
【问题描述】:
我想制作一个启动前台服务的应用程序,以随时检查哪些其他应用程序正在运行。
启动服务并在不同线程中运行一些逻辑部分。创建了通知和计时器(循环),每 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 小时。我必须再次停止并重新启动。
谢谢
【问题讨论】:
标签: java android performance service