美文网首页
RecentsView 不显示已经结束的进程

RecentsView 不显示已经结束的进程

作者: gale_小米 | 来源:发表于2024-09-04 19:12 被阅读0次

Android11 最近任务Recents功能分析

RecentsView 不显示已经结束的进程

方式1:不完善,如果批量kill掉应用会有些延迟

Index: quickstep/src/com/android/quickstep/views/RecentsView.java
===================================================================
@@ -209,6 +209,7 @@
 import java.util.Objects;
 import java.util.function.Consumer;
 import android.util.Log;
+import android.app.ActivityManager;
 
 /**
  * A list of recent tasks.
@@ -1568,6 +1569,37 @@
         return super.isPageScrollsInitialized() && mLoadPlanEverApplied;
     }
 
+     /**
+     * 移除已经结束进程的task
+     */
+    private void removeRunningTask() {//ArrayList<GroupTask> taskGroups
+        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
+        List<ActivityManager.RecentTaskInfo> tasks = am.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+        if (tasks !=null){
+            if (DEBUG) Log.d("RecentsView","mCtx tasks size="+tasks.size());
+            for (int i=0;i<tasks.size();i++){
+                ActivityManager.RecentTaskInfo task=tasks.get(i);
+                if (DEBUG) Log.d("RecentsView","removeTask taskId="+task.taskId +",isRunning="+task.isRunning);
+                if (DEBUG && task.baseIntent !=null && task.baseIntent.getComponent() !=null) Log.d("RecentsView","removeTask baseIntent="+task.baseIntent.getComponent().getPackageName());
+                if (!task.isRunning){
+                    ActivityManagerWrapper.getInstance().removeTask(task.taskId);
+                }
+            }
+        }
+    }
     protected void applyLoadPlan(ArrayList<GroupTask> taskGroups) {
         if (mPendingAnimation != null) {
             mPendingAnimation.addEndListener(success -> applyLoadPlan(taskGroups));
@@ -2336,6 +2368,8 @@
      * Reloads the view if anything in recents changed.
      */
     public void reloadIfNeeded() {
+        if (DEBUG) Log.d("RecentsView","reloadIfNeeded");
+        removeRunningTask();
         if (!mModel.isTaskListValid(mTaskListChangeId)) {
             mTaskListChangeId = mModel.getTasks(this::applyLoadPlan, RecentsFilterState
                     .getFilter(mFilterState.getPackageNameToFilter()));

相关文章

  • 更多shell命令

     管理进程 获取磁盘统计信息 挂载新磁盘 排序数据 归档数据 实时显示进程 结束进程 kill+PID ...

  • Windows强制结束进程

    一、查看&显示进程 二、结束进程 命令说明:1、/im 指定要终止的进程的映像名称。通配符 '*'可用来指定所有任...

  • 进程(三):进程的状态

    每个 Linux 进程都有它自己的生命周期,比如,创建、执行、结束和清除。每个进程也都有各自的状态,显示进程中当前...

  • Linux进程

    显示进程 ps [选项] 选项:-a:显示当前终端所有进程信息。-u:以用户的格式显示进程信息。-x:显示后台进程...

  • steam退出游戏后还显示运行中(及一键重启steam游戏)的解

    steam退出游戏后还显示运行中绝大部分情况是因为卡了输入法的某个进程,游戏进程结束,但是输入法的进程还没结束,导...

  • linux进程的终止、暂停、挂起

    ctrl+c 结束进程ctrl+z 挂起进程并放入后台jobs 显示当前暂停的进程bg %N 使第N个任务在后台运...

  • PS查看进程

    命令参数 a 显示所有进程 -a 显示同一终端下的所有程序 -A 显示所有进程 c 显示进程的真实名称 -N 反向...

  • Linux进程管理

    1.显示系统执行的进程 参数说明:a 显示当前终端的所有进程信息u 以用户的格式显示进程信息x 显示后台进...

  • 进程管理相关

    显示进程树 显示当前终端中进程 ps ps aux ...

  • Linux下系统进程管理

    ps查看进程 参数a: 显示跟当前终端关联的所有进程u: 基于用户的格式显示(U: 显示某用户ID所有的进程)x:...

网友评论

      本文标题:RecentsView 不显示已经结束的进程

      本文链接:https://www.haomeiwen.com/subject/txilljtx.html