【问题标题】:How to get all the tasks that are running currently如何获取当前正在运行的所有任务
【发布时间】:2016-03-05 10:10:32
【问题描述】:

我想获取在 android 中运行的所有任务。我在 ActivityManager 中找到了 getRunningTasks,但从 android-5.0 开始,getRunningTasks 可能无法提供所有任务(在我的情况下,它提供了主屏幕和我的应用程序)。

另外是否有可能找到用户当前正在与之交互的任务?

任何帮助将不胜感激。

谢谢。

编辑:我正在使用以下代码。但它只给了我一个进程(那是我的应用程序)。即使我打开其他应用程序也没有显示它们。我正在运行它一加2。

@Override
    protected void onHandleIntent(Intent intent) {
        new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                getRunningApps();
            }
        }, 0, 1000);//put here time 1000 milliseconds=1 second
    }

    public void getRunningApps() {
        final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        final List<ActivityManager.RunningAppProcessInfo> recentTasks = activityManager.getRunningAppProcesses();

        for (int i = 0; i < recentTasks.size(); i++)
        {
            Log.d("Executed app", "Application executed : " +recentTasks.get(i).pkgList[0]+ "\t\t ID: "+recentTasks.get(i).pid+"");
        }
    }

【问题讨论】:

    标签: android activity-manager


    【解决方案1】:

    使用getRunningAppProcesses,它将返回RunningAppProcessInfo 对象列表,这些对象将为您提供有关每个正在运行的应用程序的一些数据。您可以检索到的有关应用程序的信息之一是它的importance,它可以有一个值IMPORTANCE_FOREGROUND,表示该进程是当前活动的应用程序!

    相关文档:

    getRunningAppProcesses

    RunningAppProcessInfo

    IMPORTANCE_FOREGROUND

    如果这对您有所帮助,请随时按向左的箭头:)

    【讨论】:

      【解决方案2】:

      如果您不是该任务的所有者,Android 不会向您提供其信息。

      【讨论】:

      • 但是如果你看到 voodoo 应用程序,它们只会在某些应用程序中显示它们的小部件。所以我认为这可能是可能的。但是如果有任何解决方法可以解决这样的问题,请给我建议。
      【解决方案3】:

      使用这个code 它对我有用。不要忘记在您的Xml 文件中使用ListView

      ListView listView = (ListView) findViewById(R.id.listview);
              ActivityManager actvityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
              List<ActivityManager.RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();
              String[] values = new String[procInfos.size()];
              final String packageName = "my.application.package";
              PackageManager packageManager = getApplicationContext().getPackageManager();
              for (int i = 0; i < procInfos.size(); i++) {
                  values[i] = procInfos.get(i).processName;
              }
              ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
              listView.setAdapter(adapter);  
      

      【讨论】:

        【解决方案4】:

        我相信 getRecentTasksgetRunningTask 在 API 21 中已被弃用。我不确定您要达到什么目的,也许您应该尝试 getRunningAppProcess。这给了你类似的结果。

        【讨论】:

        • 这是一个经过验证的解决方案?
        猜你喜欢
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        相关资源
        最近更新 更多