假设我在类中有一个方法,我需要它在循环中连续运行。 如何在不破坏应用程序的情况下执行此操作。
我问这个是因为我有一个方法可以在设备上获取前台活动,每次前台活动发生变化时我都需要知道。
编辑 -
这是获取当前活动的前景活动的代码 -
public void getForeground()
{
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
String foreground = am.getRunningTasks(1).get(0).topActivity.getPackageName();
Toast.makeText(getApplicationContext(), foreground, Toast.LENGTH_SHORT).show();
}
现在,我需要调用此方法,以便只要有特定的活动已经打开(比如Facebook,Messenger或Whatsapp),我就知道了。
我该怎么做?
除了创建自定义侦听器还是使用ScheduledExecutorService
?
或者如果可以使用上述方法完成,我该怎么做?
答案 0 :(得分:1)
使用循环会大量加载内存和设备 你可以这样做吗
从Activity生命周期中利用onStop()或onResume甚至onStart()方法
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
}
已恢复在此状态下,活动位于前台和用户中 可以与它互动。 (有时也被称为“跑步” 状态。)
暂停在此状态下,活动被另一个部分遮挡 活动 - 前景中的其他活动 半透明或不覆盖整个屏幕。暂停了 activity不接收用户输入,也不能执行任何代码。
已停止在此状态下,活动完全隐藏而不是 对用户可见;它被认为是在后台。而 停止,活动实例及其所有状态信息如 保留成员变量,但不能执行任何代码。
答案 1 :(得分:0)
使用新线程执行该方法。
public void yourMethod() {
doStuff();
new Thread() {
public void run() {
yourMethod();
}
}.start();
}
答案 2 :(得分:0)
在您编辑的案例中,您最好采用这种方式
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
String foreground;
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
foreground = am.getRunningTasks(1).get(0).topActivity.getPackageName();
Toast.makeText(getApplicationContext(), foreground, Toast.LENGTH_SHORT).show();
}
}, 10000); //every 10 seconds