我正在尝试创建一个能够持续检查前台应用程序的服务,当某个应用程序进入前台时,执行任务。当它退出前台时,执行另一项任务。这应该重复发生,直到用户停止服务(我已经完成服务处理)。
我不知道如何解决这个问题。以下是我检查当前前台应用程序的方法:
/* Get all Tasks available (with limit set). */
ActivityManager mgr = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> allTasks = mgr.getRunningTasks(showLimit);
/* Loop through all tasks returned. */
for (ActivityManager.RunningTaskInfo aTask : allTasks)
{
Log.i("MyApp", "Task: " + aTask.baseActivity.getClassName());
if (aTask.baseActivity.getClassName().equals("package"))
running=true;
}
然后,我有一个简单的if / else检查运行状态并根据需要执行任务:
if(running =! true) {
MainActivity defaults = new MainActivity();
defaults.RunAsRoot(commandsdefault);
}
else {
MainActivity defaults = new MainActivity();
defaults.RunAsRoot(commands);
}
现在,它不会连续运行,只会执行一次并停止运行。所以,我将onCreate()
的全部内容放在while()
:
boolean justrun = true;
while(doit = true) {
//everything here: foreground checker, along with if/else
}
那也没有奏效:一切都只是超级慢,最终强行关闭,我假设因为它占用了所有资源。
我该怎么做呢?主要目标似乎非常简单......我只想获取前台应用程序包名称,并在更改时执行命令。
编辑:我在MyService中添加了以下方法:
public int serviceservice() {
boolean running = true;
int showLimit = 20;
boolean doit = true;
/* Get all Tasks available (with limit set). */
ActivityManager mgr = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> allTasks = mgr.getRunningTasks(showLimit);
/* Loop through all tasks returned. */
for (ActivityManager.RunningTaskInfo aTask : allTasks)
{
Log.i("MyApp", "Task: " + aTask.baseActivity.getClassName());
if (aTask.baseActivity.getClassName().equals("package"))
running=true;
}
if(running =! true) {
MainActivity defaults = new MainActivity();
defaults.RunAsRoot(commandsdefault);
}
return START_STICKY;
}
我打电话给serviceservice();在我的OnCreate()和onStart()中。它仍然只运行一次。 :/