android reboot流程视图

本文详细介绍了Android系统中reboot的流程,从ShutdownThread.java的shutdown()方法开始,包括发送shutdown广播、关闭服务、调用lowLevelReboot或lowLevelShutdown,直到init进程的powerctl指令,最终进入内核进行系统重启或关机操作。涉及的关键步骤包括系统属性设置、init.rc配置、android_reboot函数以及内核中的sys_reboot系统调用。
摘要由CSDN通过智能技术生成
下面是android简单的reboot流程视图




下面是源码分析

从Java层的ShutdownThread.java的shutdown()开始:


frameworks/base/services/java/com/android/server/power/ShutdownThread.java

发出shutdown的广播,这个很重要,要通知所有应用我要关机了。

[java]
 private static void beginShutdownSequence(Context context) {
.......
        Log.i(TAG, "Sending shutdown broadcast...");
         
         // First send the high-level shut down broadcast.
         mActionDone = false;
         Intent intent = new Intent(Intent.ACTION_SHUTDOWN);
         intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
         mContext.sendOrderedBroadcastAsUser(intent,
                 UserHandle.ALL, null, br, mHandler, 0, null, null);
         
         final long endTime = SystemClock.elapsedRealtime() + MAX_BROADCAST_TIME;
         synchronized (mActionDoneSync) {
             while (!mActionDone) {
                 long delay = endTime - SystemClock.elapsedRealtime();
                 if (delay <= 0) {
                     Log.w(TAG, "Shutdown broadcast timed out");
                     break;
                 } 
                 try {
                     mActionDoneSync.wait(delay);
                 } catch (InterruptedException e) {
                 }   
             }   
         }       

关闭activity管理器,因为不需要了。

         Log.i(TAG, "Shutting down activity manager...");
                 
         final IActivityManager am =
             ActivityManagerNative.asInterface(ServiceManager.checkService("activity"));
         if (am != null) {
             try {
                 am.shutdown(MAX_BROADCAST_TIME);
             } catch (RemoteException e) {
             }
         }

关闭radio设备,包括NFC,modem等。

        shutdownRadios(MAX_RADIO_WAIT_TIME);

关闭mountservice,这个是阻塞操作,失败会导致关机失败,把电耗光。成功则打印:Result code 0 from mount....

         Log.i(TAG, "Shutting down MountService");
                 
         // Set initial variables and time out time.
         mActionDone = false;
         final long endShutTime = SystemClock.elapsedRealtime() + MAX_SHUTDOWN_WAIT_TIME;
         synchronized (mActionDoneSync) {
             try {
                 final IMountService mount = IMountService.Stub.asInterface(
                         ServiceManager.checkService("mount"));
                 if (mount != null) {
                     mount.shutdown(observer);
                 } else {
                     Log.w(TAG, "MountService unavailable for shutdown");
                 }       
             } catch (Exception e) {
                 Log.e(TAG, "Exception during MountService shutdown", e);
             }   
             while (!mActionDone) {
                 long delay = endShutTime - SystemClock.elapsedRealtime();
                 if (delay <= 0) { 
                     Log.w(TAG, "Shutdown wait timed out");
                     break;
                 } 
                 try {
                     mActionDoneSync.wait(delay);
                 } catch (InterruptedException e) {
                 }   
             }   
         }  


然后调rebootOrShutdown()函数
     public static void rebootOrShutdown(boolean reboot, String reason) {
         if (reboot) {
             Log.i(TAG, "Rebooting, reas
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值