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

       这个和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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值