Android 7.0 start home activity and send boot completed broadcast

来源:互联网 发布:Windows的tmp路径 编辑:程序博客网 时间:2024/05/29 12:03

Start home activity flow.

04-21 08:17:55.254   558   558 W System.err:     at com.android.server.am.ActivityManagerService.getHomeIntent(ActivityManagerService.java:3958)
04-21 08:17:55.254   558   558 W System.err:     at com.android.server.am.ActivityManagerService.startHomeActivityLocked(ActivityManagerService.java:3971)
04-21 08:17:55.254   558   558 W System.err:     at com.android.server.am.ActivityManagerService.systemReady(ActivityManagerService.java:13428)
04-21 08:17:55.254   558   558 W System.err:     at com.android.server.SystemServer.startOtherServices(SystemServer.java:1308)
04-21 08:17:55.254   558   558 W System.err:     at com.android.server.SystemServer.run(SystemServer.java:334)

In frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

1188    String mTopAction = Intent.ACTION_MAIN;
3950IntentgetHomeIntent() {

3951        Intent intent = new Intent(mTopAction, mTopData != null ? Uri.parse(mTopData) : null);3952        intent.setComponent(mTopComponent);3953        intent.addFlags(Intent.FLAG_DEBUG_TRIAGED_MISSING);3954        if (mFactoryTest != FactoryTest.FACTORY_TEST_LOW_LEVEL) {3955            intent.addCategory(Intent.CATEGORY_HOME);3956        }3957        return intent;3958    }39593960    boolean startHomeActivityLocked(int userId, String reason) {3961        if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL3962                && mTopAction == null) {3963            // We are running in factory test mode, but unable to find3964            // the factory test app, so just sit around displaying the3965            // error message and don't try to start anything.3966            return false;3967        }3968        Intent intent = getHomeIntent();3969        ActivityInfo aInfo = resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);3970        if (aInfo != null) {3971            intent.setComponent(new ComponentName(aInfo.applicationInfo.packageName, aInfo.name));3972            // Don't do this if the home app is currently being3973            // instrumented.3974            aInfo = new ActivityInfo(aInfo);3975            aInfo.applicationInfo = getAppInfoForUser(aInfo.applicationInfo, userId);3976            ProcessRecord app = getProcessRecordLocked(aInfo.processName,3977                    aInfo.applicationInfo.uid, true);3978            if (app == null || app.instrumentationClass == null) {3979                intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);3980                mActivityStarter.startHomeActivityLocked(intent, aInfo, reason);3981            }3982        } else {3983            Slog.wtf(TAG, "No home screen found for " + intent, new Throwable());3984        }39853986        return true;3987    }
Then,

04-21 08:17:55.258   558   558 E ActivityManager: startHomeActivityLocked, packageName: com.android.settings
04-21 08:17:55.258   558   558 E ActivityManager: startHomeActivityLocked, aInfo.name: com.android.settings.FallbackHome
04-21 08:17:55.258   558   558 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.settings/.FallbackHome

FallbackHomejust set some attributes and finish itself.

Then AMS will try to start other home activity (becauseFallbackHome has the lowest priority, -1000) .This time it will find the real home activity defined by user. It is usually launcher.


04-21 08:17:58.422   558   571 W System.err:     at com.android.server.am.ActivityManagerService.getHomeIntent(ActivityManagerService.java:3958)
04-21 08:17:58.422   558   571 W System.err:     at com.android.server.am.ActivityManagerService.startHomeActivityLocked(ActivityManagerService.java:3971)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStackSupervisor.resumeHomeStackTask(ActivityStackSupervisor.java:677)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2196)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2143)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:1841)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:1831)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStack.finishCurrentActivityLocked(ActivityStack.java:3639)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1301)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1220)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7001)
04-21 08:17:58.423   558   571 W System.err:     at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:571)
04-21 08:17:58.423   558   571 W System.err:     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2819)
04-21 08:17:58.423   558   571 W System.err:     at android.os.Binder.execTransact(Binder.java:565)


Boot completed broadcast sending flow.

In frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

5956    void enableScreenIfNeededLocked() {5957        if (DEBUG_BOOT) {5958            RuntimeException here = new RuntimeException("here");5959            here.fillInStackTrace();5960            Slog.i(TAG_WM, "enableScreenIfNeededLocked: mDisplayEnabled=" + mDisplayEnabled5961                    + " mForceDisplayEnabled=" + mForceDisplayEnabled5962                    + " mShowingBootMessages=" + mShowingBootMessages5963                    + " mSystemBooted=" + mSystemBooted, here);5964        }5965        if (mDisplayEnabled) {5966            return;5967        }5968        if (!mSystemBooted && !mShowingBootMessages) {5969            return;5970        }5971        mH.sendEmptyMessage(H.ENABLE_SCREEN);5972    }

04-21 07:22:00.087   550   605 W System.err:     at com.android.server.wm.WindowManagerService.enableScreenIfNeededLocked(WindowManagerService.java:5971)
04-21 07:22:00.087   550   605 W System.err:     at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementInner(WindowSurfacePlacer.java:579)
04-21 07:22:00.087   550   605 W System.err:     at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:237)
04-21 07:22:00.087   550   605 W System.err:     at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:185)
04-21 07:22:00.087   550   605 W System.err:     at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:8384)
04-21 07:22:00.087   550   605 W System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
04-21 07:22:00.087   550   605 W System.err:     at android.os.Looper.loop(Looper.java:154)
04-21 07:22:00.087   550   605 W System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
04-21 07:22:00.087   550   605 W System.err:     at com.android.server.ServiceThread.run(ServiceThread.java:46)

In frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

8633                case ENABLE_SCREEN: {8634                    performEnableScreen();8635                    break;8636                }

In frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

04-21 07:22:00.096   550   605 W System.err:     at com.android.server.wm.WindowManagerService.checkBootAnimationCompleteLocked(WindowManagerService.java:6111)
04-21 07:22:00.096   550   605 W System.err:     at com.android.server.wm.WindowManagerService.performEnableScreen(WindowManagerService.java:6084)
04-21 07:22:00.096   550   605 W System.err:     at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:8640)
04-21 07:22:00.096   550   605 W System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
04-21 07:22:00.096   550   605 W System.err:     at android.os.Looper.loop(Looper.java:154)
04-21 07:22:00.096   550   605 W System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
04-21 07:22:00.096   550   605 W System.err:     at com.android.server.ServiceThread.run(ServiceThread.java:46)

6106    private boolean checkBootAnimationCompleteLocked() {6107        if (SystemService.isRunning(BOOT_ANIMATION_SERVICE)) {6108            mH.removeMessages(H.CHECK_IF_BOOT_ANIMATION_FINISHED);6109            mH.sendEmptyMessageDelayed(H.CHECK_IF_BOOT_ANIMATION_FINISHED,6110                    BOOT_ANIMATION_POLL_INTERVAL);6111            if (DEBUG_BOOT) Slog.i(TAG_WM, "checkBootAnimationComplete: Waiting for anim complete");6112            return false;6113        }6114        if (DEBUG_BOOT) Slog.i(TAG_WM, "checkBootAnimationComplete: Animation complete!");6115        return true;6116    }

In frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

8841                case CHECK_IF_BOOT_ANIMATION_FINISHED: {8842                    final boolean bootAnimationComplete;8843                    synchronized (mWindowMap) {8844                        if (DEBUG_BOOT) Slog.i(TAG_WM, "CHECK_IF_BOOT_ANIMATION_FINISHED:");8845                        bootAnimationComplete = checkBootAnimationCompleteLocked();8846                    }8847                    if (bootAnimationComplete) {8848                        performEnableScreen();8849                    }8850                }

04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.UserController.finishUserUnlocking(UserController.java:285)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.UserController.unlockUserCleared(UserController.java:1019)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.UserController.maybeUnlockUser(UserController.java:978)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.UserController.finishUserBoot(UserController.java:275)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.UserController.sendBootCompletedLocked(UserController.java:1380)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.ActivityManagerService.finishBooting(ActivityManagerService.java:6931)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.am.ActivityManagerService.bootAnimationComplete(ActivityManagerService.java:6957)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.wm.WindowManagerService.performEnableScreen(WindowManagerService.java:6099)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:8854)
04-21 07:22:00.411   550   605 W System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
04-21 07:22:00.411   550   605 W System.err:     at android.os.Looper.loop(Looper.java:154)
04-21 07:22:00.411   550   605 W System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
04-21 07:22:00.411   550   605 W System.err:     at com.android.server.ServiceThread.run(ServiceThread.java:46)

In frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

6833    final void finishBooting() {6908            if (mFactoryTest != FactoryTest.FACTORY_TEST_LOW_LEVEL) {6909                // Start looking for apps that are abusing wake locks.6910                Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);6911                mHandler.sendMessageDelayed(nmsg, POWER_CHECK_DELAY);6912                // Tell anyone interested that we are done booting!6913                SystemProperties.set("sys.boot_completed", "1");69146915                // And trigger dev.bootcomplete if we are not showing encryption progress6916                if (!"trigger_restart_min_framework".equals(SystemProperties.get("vold.decrypt"))6917                    || "".equals(SystemProperties.get("vold.encrypt_progress"))) {6918                    SystemProperties.set("dev.bootcomplete", "1");6919                }6920                mUserController.sendBootCompletedLocked(6921                        new IIntentReceiver.Stub() {6922                            @Override6923                            public void performReceive(Intent intent, int resultCode,6924                                    String data, Bundle extras, boolean ordered,6925                                    boolean sticky, int sendingUser) {6926                                synchronized (ActivityManagerService.this) {6927                                    requestPssAllProcsLocked(SystemClock.uptimeMillis(),6928                                            true, false);6929                                }6930                            }6931                        });6932                scheduleStartProfilesLocked();6933            }6934        }6935    }

In frameworks/base/services/core/java/com/android/server/am/UserController.java

280    private void finishUserUnlocking(final UserState uss) {281        final int userId = uss.mHandle.getIdentifier();282        boolean proceedWithUnlock = false;295296        if (proceedWithUnlock) {297            uss.mUnlockProgress.start();304305            // Dispatch unlocked to system services; when fully dispatched,306            // that calls through to the next "unlocked" phase307            mHandler.obtainMessage(SYSTEM_USER_UNLOCK_MSG, userId, 0, uss)308                    .sendToTarget();309        }310    }

In frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

2038            case SYSTEM_USER_UNLOCK_MSG: {2039                final int userId = msg.arg1;2040                mSystemServiceManager.unlockUser(userId);2041                synchronized (ActivityManagerService.this) {2042                    mRecentTasks.loadUserRecentsLocked(userId);2043                }2044                if (userId == UserHandle.USER_SYSTEM) {2045                    startPersistentApps(PackageManager.MATCH_DIRECT_BOOT_UNAWARE);2046                }2047                installEncryptionUnawareProviders(userId);2048                mUserController.finishUserUnlocked((UserState) msg.obj);2049                break;2050            }

04-21 07:22:01.369   550   583 W System.err:     at com.android.server.am.UserController.finishUserUnlockedCompleted(UserController.java:389)
04-21 07:22:01.369   550   583 W System.err:     at com.android.server.am.UserController.finishUserUnlocked(UserController.java:382)
04-21 07:22:01.369   550   583 W System.err:     at com.android.server.am.ActivityManagerService$MainHandler.handleMessage(ActivityManagerService.java:2048)
04-21 07:22:01.369   550   583 W System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
04-21 07:22:01.369   550   583 W System.err:     at android.os.Looper.loop(Looper.java:154)
04-21 07:22:01.369   550   583 W System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
04-21 07:22:01.369   550   583 W System.err:     at com.android.server.ServiceThread.run(ServiceThread.java:46)

382    private void finishUserUnlockedCompleted(UserState uss) {383        final int userId = uss.mHandle.getIdentifier();384        synchronized (mService) {385            // Bail if we ended up with a stale user386            if (mStartedUsers.get(uss.mHandle.getIdentifier()) != uss) return;387            final UserInfo userInfo = getUserInfo(userId);388            if (userInfo == null) {389                return;390            }391392            // Only keep marching forward if user is actually unlocked393            if (!StorageManager.isUserKeyUnlocked(userId)) return;394395            // Remember that we logged in396            mUserManager.onUserLoggedIn(userId);397398            if (!userInfo.isInitialized()) {399                if (userId != UserHandle.USER_SYSTEM) {400                    Slog.d(TAG, "Initializing user #" + userId);401                    Intent intent = new Intent(Intent.ACTION_USER_INITIALIZE);402                    intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);403                    mService.broadcastIntentLocked(null, null, intent, null,404                            new IIntentReceiver.Stub() {405                                @Override406                                public void performReceive(Intent intent, int resultCode,407                                        String data, Bundle extras, boolean ordered,408                                        boolean sticky, int sendingUser) {409                                    // Note: performReceive is called with mService lock held410                                    getUserManager().makeInitialized(userInfo.id);411                                }412                            }, 0, null, null, null, AppOpsManager.OP_NONE,413                            null, true, false, MY_PID, SYSTEM_UID, userId);414                }415            }416417            Slog.d(TAG, "Sending BOOT_COMPLETE user #" + userId);418            int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);419            MetricsLogger.histogram(mService.mContext, "framework_boot_completed", uptimeSeconds);420            final Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);421            bootIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);422            bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT423                    | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);424            mService.broadcastIntentLocked(null, null, bootIntent, null, null, 0, null, null,425                    new String[] { android.Manifest.permission.RECEIVE_BOOT_COMPLETED },426                    AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, userId);427        }428    }

0 0