清除应用任务时把service等也清掉,如qq音乐等

news/2024/7/7 21:14:26

       这个和apk本身的逻辑有关,属于apk本身行为,后台kill的只是activity,并没有kill sevice,
如果播放service是startService启动,或者activity并没有去unbind service,这样service也还会运行.另外也可以在开发者选项,正在运行的服务里面查看,此时播放service还是在运行,这个是apk自身行为.
    若要在最近任务列表里清除应用时同时也清掉service,可以如下操作:
1. P版本:
vendor下面的launcher 里面
RecentsView.java
TaskActionController.java

removeTask 方法里面
-         ActivityManagerWrapper.getInstance().removeTask(task.key.id);
+        final ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
+        String pkgName = task.key.getPackageName();
+        Log.d(TAG, "Stopping pkgName " + pkgName);
+        am.forceStopPackage(pkgName);

T版本:
alps_mssi/frameworks/base/data/etc/com.android.launcher3.xml
         <permission name="android.permission.STOP_APP_SWITCHES"/>
+               <permission name="android.permission.FORCE_STOP_PACKAGES"/>

alps_mssi/vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/AndroidManifest.xml
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>

alps_mssi/vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/RecentsView.java

 import java.util.Objects;
 import java.util.function.Consumer;
 
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
+
 /**
  * A list of recent tasks.
  */
@@ -3127,12 +3130,16 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
                 if (success) {
                     if (shouldRemoveTask) {
                         if (dismissedTaskView.getTask() != null) {
+                                                       //andy
+                                                       String pkgname = dismissedTaskView.getTask().key.getPackageName();
+                                                       Log.e("andy---RecentsView","pkgname="+pkgname);
+                                                       
                             if (ENABLE_QUICKSTEP_LIVE_TILE.get()
                                     && dismissedTaskView.isRunningTask()) {
                                 finishRecentsAnimation(true /* toRecents */, false /* shouldPip */,
-                                        () -> removeTaskInternal(dismissedTaskViewId));
+                                        () -> removeTaskInternal(dismissedTaskViewId,pkgname));
                             } else {
-                                removeTaskInternal(dismissedTaskViewId);
+                                removeTaskInternal(dismissedTaskViewId,pkgname);
                             }
                             mActivity.getStatsLogManager().logger()
                                     .withItemInfo(dismissedTaskView.getItemInfo())
@@ -3401,7 +3408,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
         return lastVisibleIndex;
     }
 
-    private void removeTaskInternal(int dismissedTaskViewId) {
+    private void removeTaskInternal(int dismissedTaskViewId, String pkgname) {
         int[] taskIds = getTaskIdsForTaskViewId(dismissedTaskViewId);
         int primaryTaskId = taskIds[0];
         int secondaryTaskId = taskIds[1];
@@ -3411,6 +3418,10 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
                     if (secondaryTaskId != -1) {
                         ActivityManagerWrapper.getInstance().removeTask(secondaryTaskId);
                     }
+                                       //andy
+                                       ActivityManager am = (ActivityManager) mActivity.getSystemService(Context.ACTIVITY_SERVICE);
+                                       Log.e("andy---RecentsView---", "pkgname = " + pkgname);
+                                       am.forceStopPackage(pkgname);                                   
                 },
                 REMOVE_TASK_WAIT_FOR_APP_STOP_MS);
     }
@@ -3436,6 +3447,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
         int count = getTaskViewCount();
         for (int i = 0; i < count; i++) {
             addDismissedTaskAnimations(requireTaskViewAt(i), duration, anim);
+                       //andy
+                       String pkgname = requireTaskViewAt(i).getTask().key.getPackageName();
+                       Log.e("andy---RecentsView---createAllTasksDismissAnimation---","pkgname="+pkgname);
+                       ActivityManager am = (ActivityManager) mActivity.getSystemService(Context.ACTIVITY_SERVICE);
+                       am.forceStopPackage(pkgname);                                   
+                       
         }
 
         mPendingAnimation = anim;


http://lihuaxi.xjx100.cn/news/1076123.html

相关文章

Linux创建用户,并赋予管理指定目录的权限

一、创建用户 1.创建用户&#xff1a; useradd 用户名 创建用户的时候会对应创建一个同名的组 2.设置密码&#xff1a; passwd userName 随后会提示输入密码 二、赋予权限 Linux给用户和文件赋予权限 1、先对用户所属的的组赋权限&#xff1a; chown -R 用户名:用户组 目录 2、…

2023-04-27 polardbx-LSM-tree的Parallel Recovery性能优化

背景 数据库的Crash Recovery时长关系到数据库的可用性SLA、故障止损时间、升级效率等多个方面。本文描述了针对X-Engine数据库存储引擎的一种Crash Recovery优化手段,在典型场景下可以显著缩短数据库实例的故障恢复时间,提升用户使用感受。 当前面临的问题 X-Engine是阿里…

IT技术发展与应用:TOP技能探讨及学习建议

随着信息技术的快速发展&#xff0c;IT技术已经深入到我们生活的方方面面。在这篇文章中&#xff0c;我们探讨了IT技术发展的历程和现在最吃香的技能TOP榜。同时&#xff0c;我们还分享了如何学习这些TOP技能的方法&#xff0c;包括自学、参加课程、参加线上或线下技术交流活动…

SQL——索引

&#x1f4a1; 索引 在关系型数据库中&#xff0c;索引是一种单独的、物理上的对数据库表中的一列或多列的值进行排序的一种存储结构&#xff0c;他是某个表中的一列或着若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单&#xff08;类似于图书目录&#x…

SQL select语句检索数据

编写SQL语句 SQL语句不区分大小写&#xff0c;可以输入在一行或多行中&#xff0c;关键字不能缩写或换行&#xff0c;字句通常放在单独的行中&#xff0c;可以适当使用缩进增加代码的可读性。 SQL SELECT 语句的功能 映射&#xff1a;选择由查询返回的表中列。可以根据需要选…

社科院与美国杜兰大学金融管理硕士项目——选择在职读研是正确的吗

这个世界上&#xff0c;根本没有正确的选择。我们只不过要努力奋斗&#xff0c;使当初的选择变得正确。最近有咨询项目的同学总是在纠结是否要在职读研&#xff0c;在职读研是否是一条正确的路。当我们为此纠结时&#xff0c;其实只有一条路&#xff0c;那就是选择向前走。往前…

ChatGPT搭建AI网站实战

1.概述 ChatGPT是一款基于GPT-3.5架构的大型语言模型&#xff0c;它能够进行自然语言处理和生成对话等任务。作为一款智能化的聊天机器人&#xff0c;ChatGPT有着广泛的应用场景&#xff0c;如在线客服、智能助手、个性化推荐等。今天笔者给大家分享一下如何使用ChatGPT的API模…

【Python/机器学习】不使用Conda安装Pytorch和Torchvision(Windows系统)

这篇文章介绍如何不使用conda等包管理系统在Windows系统上直接使用pip安装Pytorch和Torchvision。首先你需要有Python 3.6以上的64位环境&#xff08;32位是不可以的哟&#xff01;&#xff09;&#xff0c;并且假设你有NVIDIA显卡且已安装CUDA。 文章目录 1. 查看CUDA版本2. 找…