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