ActivityStarter之startActivityUnchecked(()

ActivityStarter封装了一个activity启动的过程(包括上下文环境),不采用情景栈分析法真的很难分析,这里采用情景分析法把该函数分析. 整体代码如下:

 private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord,
            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
            int startFlags, boolean doResume, ActivityOptions options, TaskRecord inTask) {

         //1. 初始化环境和lunchModeFlags   
        setInitialState(r, options, inTask, doResume, startFlags, sourceRecord, voiceSession,
                voiceInteractor);
        computeLaunchingTaskFlags();
        computeSourceStack();
        mIntent.setFlags(mLaunchFlags);

        //2. 复用activity逻辑
        mReusedActivity = getReusableIntentActivity();
        ......
        if (mReusedActivity != null) {
            ......
            mReusedActivity = setTargetStackAndMoveToFrontIfNeeded(mReusedActivity);
        ......
            setTaskFromIntentActivity(mReusedActivity);

            if (!mAddingToTask && mReuseTask == null) {
                resumeTargetStackIfNeeded();
                return START_TASK_TO_FRONT;
            }
        }
     .......

       //singleTop 或者singleInstance的处理
        if (dontStart) {
            ActivityStack.logStartActivity(AM_NEW_INTENT, top, top.task);
            // For paranoia, make sure we have correctly resumed the top activity.
            if (mDoResume) {
                mSupervisor.resumeFocusedStackTopActivityLocked();
            }
            ......
            top.deliverNewIntentLocked(
                    mCallingUid, mStartActivity.intent, mStartActivity.launchedFromPackage);
          ......
            return START_DELIVERED_TO_TOP;
        }

        //3. 设置对应task并带到前台
        if (mStartActivity.resultTo == null && mInTask == null && !mAddingToTask
                && (mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) != 0) {
            newTask = true;
            setTaskFromReuseOrCreateNewTask(taskToAffiliate);
         ......
        } else if (mSourceRecord != null) {
            ......
            final int result = setTaskFromSourceRecord();
            ......
        } else if (mInTask != null) {
            ......
            final int result = setTaskFromInTask();
            if (result != START_SUCCESS) {
                return result;
            }
        } else {
            setTaskToCurrentTopOrCreateNewTask();
        }
    //  4. 启动Activity
        mTargetStack.startActivityLocked(mStartActivity, newTask, mKeepCurTransition, mOptions);

   //   5. 使Activity可见
        if (mDoResume) {
            if (!mLaunchTaskBehind) {
                mService.setFocusedActivityLocked(mStartActivity, "startedActivity");
            }
            final ActivityRecord topTaskActivity = mStartActivity.task.topRunningActivityLocked();
            if (!mTargetStack.isFocusable()
                    || (topTaskActivity != null && topTaskActivity.mTaskOverlay
                    && mStartActivity != topTaskActivity)) {
               .... . .
                mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                mWindowManager.executeAppTransition();
            } else {
                mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack, mStartActivity,
                        mOptions);
            }
        } else {
            mTargetStack.addRecentActivityLocked(mStartActivity);
        }
        ......
        return START_SUCCESS;
    }

我们先整体介绍下这里activity启动的过程

  1. 计算启动的flags,首先计算flags是因为后面要根据flags选择启动的task,所以这一步是铺垫作用.这里读者可能会问为什么要计算,因为有些flags是冲突的,所以需要计算一下.
  2. 对于找到task的过程其实还包含一些特殊的activity模式和标志的处理,以及对activity复用的逻辑.可以复用的情况包含如下几种 
    1. LaunchSingleInstance
    2. LaunchSingleTask
    3. (singleTop|FLAG_ACTIVITY_SINGLE_TOP) && activity已经在已经在栈顶. 对于在栈顶这一条,如果指定了FLAG_ACTIVITY_NEW_TASK标志或者要启动的activity模式为LaunchSingleInstance或者 LaunchSingleTask的activity,又或者mOptions.getLaunchTaskId()指定了taskId(这个优先级要高于参数中指定的inTask).其实可以先把其他的符合复用条件的task放到栈顶.所以在复用之前还有根据条件将复用的task带到前台的环节. 对于activity复用后这些activity是不用启动的,之需要使他们可见可以返回了,还第5步有着类似的逻辑
  3. 计算在哪个task中启动,这里可定是有四种种情况了
    1. 新创建一个task启动 (指定了FLAG_ACTIVITY_NEW_TASK标志,没有找到复用的task)
    2. 在sourceRecord(也就是调用startActivity的activity),没有指定FLAG_ACTIVITY_NEW_TASK标志,并且sourceRecord不为空
    3. 在指定的task中启动, 一般是用于恢复task
    4. 在当前焦点stack的topTask中启动 , 既没有FLAG_ACTIVITY_NEW_TASK,又没有指定task并且还没有mSourceRecord,这种情况根据注释说不会发生
  4. 在锚定task并把它带到前台之后就可以启动activity了,使用 mTargetStack.startActivityLocked(mStartActivity, newTask, mKeepCurTransition, mOptions)
  5. mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack, mStartActivity,
    mOptions) 使activity可见 

下面就围绕这4步对代码进行展开说明

一.对启动参数进行初始化,主要是下面三个函数

  1. setInitialState(r, options, inTask, doResume, startFlags, sourceRecord, voiceSession,
    voiceInteractor);
    computeLaunchingTaskFlags();
    computeSourceStack();
    mIntent.setFlags(mLaunchFlags);
 private void setInitialState(ActivityRecord r, ActivityOptions options, TaskRecord inTask,
            boolean doResume, int startFlags, ActivityRecord sourceRecord,
            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor) {
  
  

setInitialState 函数比较简单,主要初始化了如下变量

  • mStartActivity 要启动的Activity的ActivityRecord.
  • mIntent 调用者传递的intent
  • mOptions 调用者传递的额外参数,主要用于动画和task,stack,display等额外信息的传递
  • mCallingUid 调用者uid
  • mSourceRecord 调用者activity
  • mLaunchBounds 打掉主要给PIP模式使用,指定activity的大小
  • mLaunchSingleTop 要启动的activity是否为singleTop模式的activity 
  • mLaunchSingleInstance: singleInstance模式的activity
  • mLaunchSingleTask : singleTask模式的activity
  • mLaunchFlags : 这个值通过adjustLaunchFlagsToDocumentMode计算,主要是通过intent中传递的flags与在AndroidManifest.xml中配置的lunchMode和documentLaunchMode做一些处理,并把DocumentMode转化为lunchModeFlags,操作如下:
 private int adjustLaunchFlagsToDocumentMode(ActivityRecord r, boolean launchSingleInstance,
            boolean launchSingleTask, int launchFlags) {
        if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_DOCUMENT) != 0 &&
                (launchSingleInstance || launchSingleTask)) {
            launchFlags &=
                    ~(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | FLAG_ACTIVITY_MULTIPLE_TASK);
        } else {
            switch (r.info.documentLaunchMode) {
                case ActivityInfo.DOCUMENT_LAUNCH_NONE:
                    break;
                case ActivityInfo.DOCUMENT_LAUNCH_INTO_EXISTING:
                    launchFlags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
                    break;
                case Acti
08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: java.lang.IllegalArgumentException: Not allowed to operate with invalid organizer 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.sendTaskFragmentOperationFailure(WindowOrganizerController.java:2011) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.validateTaskFragment(WindowOrganizerController.java:1382) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.validateTaskFragmentOperation(WindowOrganizerController.java:1365) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.applyTaskFragmentOperation(WindowOrganizerController.java:1155) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.applyHierarchyOp(WindowOrganizerController.java:1004) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.applyTransaction(WindowOrganizerController.java:594) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.WindowOrganizerController.applyTransactions(WindowOrganizerController.java:482) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:95) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:929) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:5621) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at android.os.Binder.execTransactInternal(Binder.java:1339) 08-04 16:55:34.096 29723 31220 E ParallelSession_wangw: at android.os.Binder.execTransact(Binder.java:1275)
最新发布
08-05
08-04 15:13:41.002 5314 5314 W tek.inputmethod: Accessing hidden method Ldalvik/system/VMRuntime;->setHiddenApiExemptions([Ljava/lang/String;)V (blocked,core-platform-api, reflection, denied) 08-04 15:13:41.286 5352 5352 W utmethod.assist: Accessing hidden method Ldalvik/system/VMRuntime;->setHiddenApiExemptions([Ljava/lang/String;)V (blocked,core-platform-api, reflection, denied) 08-04 15:13:47.672 5471 5735 W ngdong.app.mall: Long monitor contention with owner RunnerWrapper_338 (6150) at void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String)(Runtime.java:1084) waiters=0 in void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String) for 220ms 08-04 15:13:57.146 1750 2440 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: binder:1750_9 08-04 15:13:57.146 1750 2440 E AndroidRuntime: java.lang.StackOverflowError: stack size 991KB 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VPath.<init>(VectorDrawable.java:1638) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VFullPath.<init>(VectorDrawable.java:1898) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VGroup.<init>(VectorDrawable.java:1330) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VectorDrawableState.<init>(VectorDrawable.java:994) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable.<init>(VectorDrawable.java:364) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable.<init>(Unknown Source:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VectorDrawableState.newDrawable(VectorDrawable.java:1085) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.Drawable$ConstantState.newDrawable(Drawable.java:1532) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.DrawableCache.getInstance(DrawableCache.java:45) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:658) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.Resources.loadDrawable(Resources.java:1004) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.Resources.getDrawableForDensity(Resources.java:994) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.Resources.getDrawable(Resources.java:933) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.Context.getDrawable(Context.java:948) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.lambda$updateEnterpriseThumbnailDrawable$0(ActivityRecord.java:645) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.$r8$lambda$365UxoHaJfIpMBzIwgtkcWR0vGE(ActivityRecord.java:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord$$ExternalSyntheticLambda31.get(R8$$SyntheticClass:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.admin.ParcelableResource.loadDefaultDrawable(ParcelableResource.java:275) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.admin.DevicePolicyResourcesManager.getDrawable(DevicePolicyResourcesManager.java:214) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.updateEnterpriseThumbnailDrawable(ActivityRecord.java:643) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.<init>(ActivityRecord.java:2301) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.<init>(ActivityRecord.java:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord$Builder.build(ActivityRecord.java:11354) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1431) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1887) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:1132) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:73) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1887) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:1132) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:73) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1887) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:1132) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:73) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805)这段报错的原因,怎么解决,修改为:public void startSplitActivities(Intent primaryIntent, Intent secondaryIntent,ActivityTaskManagerService atmService) { //public void enterSplitScreen(Activity primary, Activity secondary) { // 创建一个WindowContainerTransaction来执行操作 WindowContainerTransaction wct = new WindowContainerTransaction(); // 创建第一个TaskFragment IBinder fragmentToken1 = new Binder(); //TaskFragment taskFragment1 = mOrganizer.createTaskFragment( // wct, null, fragmentToken1, null); TaskFragment taskFragment1 = new TaskFragment(atmService, fragmentToken1, true, true); // 创建第二个TaskFragment IBinder fragmentToken2 = new Binder(); //TaskFragment taskFragment2 = mOrganizer.createTaskFragment( // wct, null, fragmentToken2, null); TaskFragment taskFragment2 = new TaskFragment(atmService, fragmentToken2, true, true); // 关键修复:获取 WindowContainerToken 的正确方式 WindowContainerToken wcToken1 = taskFragment1.mRemoteToken.toWindowContainerToken();//getOrganizerToken(); WindowContainerToken wcToken2 = taskFragment2.mRemoteToken.toWindowContainerToken();//getOrganizerToken(); // 设置两个TaskFragment为相邻关系 wct.setAdjacentTaskFragments(fragmentToken1, fragmentToken2, null); // 获取屏幕尺寸 int displayWidth = mContext.getResources().getDisplayMetrics().widthPixels; int displayHeight = mContext.getResources().getDisplayMetrics().heightPixels; // 设置第一个TaskFragment在左侧,占据屏幕宽度的一半 Rect bounds1 = new Rect(0, 0, displayWidth / 2, displayHeight); wct.setBounds(wcToken1, bounds1); // 设置第二个TaskFragment在右侧,占据屏幕宽度的一半 Rect bounds2 = new Rect(displayWidth / 2, 0, displayWidth, displayHeight); wct.setBounds(wcToken2, bounds2); // 启动第一个Activity到第一个TaskFragment中 ActivityOptions options1 = ActivityOptions.makeBasic(); options1.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); options1.setLaunchTaskFragmentToken(fragmentToken1); mContext.startActivity(primaryIntent, options1.toBundle()); // 启动第二个Activity到第二个TaskFragment中 ActivityOptions options2 = ActivityOptions.makeBasic(); options2.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); options2.setLaunchTaskFragmentToken(fragmentToken2); mContext.startActivity(secondaryIntent, options2.toBundle()); // 应用事务 //mOrganizer.applyTransaction(wct); mOrganizer.applyTransaction(wct, TaskFragmentOrganizer.TASK_FRAGMENT_TRANSIT_OPEN, false); /* // 获取屏幕尺寸 Display display = primary.getDisplay(); int displayWidth = display.getWidth(); int displayHeight = display.getHeight(); // 创建 WindowContainerTransaction WindowContainerTransaction wct = new WindowContainerTransaction(); // 创建两个 TaskFragment IBinder fragmentToken1 = new android.os.Binder(); IBinder fragmentToken2 = new android.os.Binder(); mOrganizer.createTaskFragment(wct, fragmentToken1, primary.getActivityToken()); mOrganizer.createTaskFragment(wct, fragmentToken2, secondary.getActivityToken()); // 设置边界(左右分屏) Rect bounds1 = new Rect(0, 0, displayWidth / 2, displayHeight); Rect bounds2 = new Rect(displayWidth / 2, 0, displayWidth, displayHeight); wct.setBounds(fragmentToken1, bounds1); wct.setBounds(fragmentToken2, bounds2); // 设置启动选项 ActivityOptions options1 = ActivityOptions.makeBasic(); options1.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); ActivityOptions options2 = ActivityOptions.makeBasic(); options2.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); // 将 Activity 放入对应的 TaskFragment wct.reparentActivityToTaskFragment(fragmentToken1, primary.getActivityToken()); wct.reparentActivityToTaskFragment(fragmentToken2, secondary.getActivityToken()); // 应用事务 mOrganizer.applyTransaction(wct, TaskFragmentOrganizer.TASK_FRAGMENT_TRANSIT_OPEN, false); */ }
08-05
3-29 18:04:12.756 1628 1762 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: AMSLice 03-29 18:04:12.756 1628 1762 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayContent.lambda$getPreferMultiDisplayArea$59(DisplayContent.java:7638) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayContent.$r8$lambda$ZMoLlyEbMfcO1m2ajSJl9KzcSMM(DisplayContent.java:0) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayContent$$ExternalSyntheticLambda53.apply(R8$$SyntheticClass:0) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.TaskDisplayArea.getItemFromTaskDisplayAreas(TaskDisplayArea.java:580) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayArea.getItemFromTaskDisplayAreas(DisplayArea.java:568) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayArea.getItemFromTaskDisplayAreas(DisplayArea.java:568) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayArea.getItemFromTaskDisplayAreas(DisplayArea.java:568) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayArea.getItemFromTaskDisplayAreas(DisplayArea.java:568) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayArea.getItemFromTaskDisplayAreas(DisplayArea.java:568) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.WindowContainer.getItemFromTaskDisplayAreas(WindowContainer.java:2585) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.DisplayContent.getPreferMultiDisplayArea(DisplayContent.java:7620) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.RootWindowContainer.getPreferMultiDisplayArea(RootWindowContainer.java:4059) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.TaskLaunchParamsModifier.getPreferredLaunchTaskDisplayArea(TaskLaunchParamsModifier.java:450) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.TaskLaunchParamsModifier.calculate(TaskLaunchParamsModifier.java:140) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.TaskLaunchParamsModifier.onCalculate(TaskLaunchParamsModifier.java:113) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.LaunchParamsController.calculate(LaunchParamsController.java:103) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityStarter.setInitialState(ActivityStarter.java:2893) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityInner(ActivityStarter.java:1870) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1681) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1496) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:818) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1452) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1380) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at android.app.ContextImpl.startActivityAsUser(ContextImpl.java:1207) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.transsion.applock.v1.AppLockLice.lambda$onActivityStarterIntercept$1(AppLockLice.java:230) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at com.transsion.applock.v1.AppLockLice$$ExternalSyntheticLambda1.run(Unknown Source:4) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:958) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:243) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at android.os.Looper.loop(Looper.java:338) 03-29 18:04:12.756 1628 1762 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:67)
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TangGeeA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值