Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在同一个类中对循环调用方法?_Android_Methods - Fatal编程技术网

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

Android 如何在同一个类中对循环调用方法?,android,methods,Android,Methods,假设我在一个类中有一个方法,我需要它在循环中连续运行。 我如何做到这一点,而不会使应用程序崩溃 我这样问是因为我有一个方法可以获取设备上的前台活动,我需要知道每次前台活动发生变化时 编辑- 以下是获取当前活动的前台活动的代码- public void getForeground() { ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); String foregrou

假设我在一个类中有一个方法,我需要它在循环中连续运行。 我如何做到这一点,而不会使应用程序崩溃

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

编辑-

以下是获取当前活动的前台活动的代码-

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
,还有更简单的方法吗


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

使用循环将严重加载内存和设备 你可以这样做

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
利用活动生命周期中的onStop()或onResume甚至onStart()方法

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

在此状态下恢复,活动位于前台,用户 你可以和它互动。(有时也称为“运行” 国家。)

在此状态下暂停,活动部分被另一个活动遮挡 活动前景中的另一个活动是 半透明或不覆盖整个屏幕。火车停了下来 活动不接收用户输入,无法执行任何代码

在此状态下停止,活动将完全隐藏且不显示 对用户可见;它被认为是在背景中。虽然 已停止,活动实例及其所有状态信息,如 成员变量被保留,但它不能执行任何代码


使用新线程执行该方法

public void yourMethod() {
    doStuff();
    new Thread() {

      public void run() {
          yourMethod();
      }
    }.start();
}

在你的情况下,你最好走这条路

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

这不会使内存过载很多吗?我的意思是,如果我必须让它保持活动状态很长一段时间,它还能工作吗?好吧,这个方法只需要获取前景中的当前活动,我想这不会太耗时。是的,这可能会工作。但我需要更多的澄清。如果我只调用onResume()中的函数,它只会运行函数一次,不是吗?在OnResume()中调用它之后,我需要做什么才能使它持续处于活动状态?使用解释编辑我想我应该更清楚。我无法修改要监视的活动。我想知道我是否可以知道Messenger或Whatsapp之类的应用程序何时被打开?你想监控任何前台活动吗?是的,正如我在编辑的问题中所解释的,我想知道用户何时打开了特定的应用程序,比如Whatsapp,我尝试了这一方法,但没有真正起作用。我将整个代码片段放入一个函数
getForeground()
,然后在
OnCreate()方法中调用它。我应该这样做吗?