如何在同一个类中循环调用方法?

时间:2014-09-12 15:57:17

标签: android methods

假设我在类中有一个方法,我需要它在循环中连续运行。 如何在不破坏应用程序的情况下执行此操作。

我问这个是因为我有一个方法可以在设备上获取前台活动,每次前台活动发生变化时我都需要知道。

编辑 -

这是获取当前活动的前景活动的代码 -

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

之外,还有一种更简单的方法吗?

或者如果可以使用上述方法完成,我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用循环会大量加载内存和设备 你可以这样做吗

从Activity生命周期中利用onStop()或onResume甚至onStart()方法

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first
}

enter image description here

  

已恢复在此状态下,活动位于前台和用户中   可以与它互动。 (有时也被称为“跑步”   状态。)

     

暂停在此状态下,活动被另一个部分遮挡   活动 - 前景中的其他活动   半透明或不覆盖整个屏幕。暂停了   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