android系统都有一个关机按键,长按这个按键系统会进行关机操作。具体实现流程如下:

在android层通过系统调用reboot(arg)调用内核中的sys_reboot,具体流程如下:
reboot——>sys_reboot()——>kernel_power_off()——>machine_power_off()——>pm_power_off();
pm_power_off 是一个函数指针,他指向和具体硬件平台相关的关机操作函数。

和sys_reboot相关的系统调用在source/kernel/sys.c中实现,然后在

source/asm-arm/unistd.h中添加系统调用号。

然后在source/arch/arm/kernel/entry-common.S中对sys_call_table(系统调用表)

进行定义,具体的表在source/arch/arm/kernel/call.S中实现。

android 系统关机,重启  
1.android系统的关机,重启代码位于frameworks/base/core/jni/android_os_Power.cpp,里面有

static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
{/*关机*/
    sync();
#ifdef HAVE_ANDROID_OS
    reboot(RB_POWER_OFF);
#endif
}

static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason)
{/*重启*/
    sync();
#ifdef HAVE_ANDROID_OS
    if (reason == NULL) {
        reboot(RB_AUTOBOOT);
    } else {
        const char *chars = env->GetStringUTFChars(reason, NULL);
        __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
                 LINUX_REBOOT_CMD_RESTART2, (char*) chars);
        env->ReleaseStringUTFChars(reason, chars);  // In case it fails.
    }
    jniThrowIOException(env, errno);
#endif
}

2.最终会调用到linux中的sys_reboot,所以我们还是可以做到在android中加入重启功能的;

关机和重启在Linux Kernel中的哪些函数里实现。
reboot的最终实现在arch_reset()函数,它通常定义在arch/arm/mach-xxx/include/mach/system.h里。system.h被ARM kernel的public code应用,因此你需要定义这个头文件,并实现它。
arch_reset的函数原型为
void arch_reset(char mode)  
void arch_reset(char mode)  
关机需要将pm_power_off这个函数指针指向你自己的实现函数。函数指针是这样定义的
void (*pm_power_off)(void);  ......

转自: http://blog.csdn.net/yanzheng1113/article/details/7178067

转载于:https://my.oschina.net/abcijkxyz/blog/788690

android系统关机流程相关推荐

  1. android 关机功能,Android系统关机或重启的几种实现方式

    前阵子工作上遇到一些关于Android系统关机或重启的系统修改,于是,做了一些尝试,也搜集了一下资料,现在整理一下,做一些总结,方便学习或者日后工作的需要. 默认的SDK并没有提供应用开发者直接的An ...

  2. Android 4.4KK系统关机流程分析

    在PowerManager的API文档中,给出了一个关机/重启接口 public void reboot (String reason) 对于这个接口的描述很简单,就是几句话. 接口的作用就是重启设备 ...

  3. android 关机 流程_android系统关机流程分析

    关机动作从按键触发中断,linux kernel层给android framework层返回按键事件进入  framework层,再从 framework层到kernel层执行kernel层关机任务. ...

  4. android系统关机广播,android关机方法汇总

    有段时间做系统hook时需要用到系统重启,找了几种重启的方法,还有几种关机的方法,总结一下. 一,发送广播 Broadcast, Intent.ACTION_REQUEST_SHUTDOWN关机广播 ...

  5. android系统关机广播,Android开机广播和关机广播

    android开机广播:代码如下: import android.content.BroadcastReceiver; import android.content.Context; import a ...

  6. Android 手机关机流程及异常分析

    极力推荐Android 开发大总结文章:欢迎收藏 程序员Android 力荐 ,Android 开发者需要的必备技能 本篇文章主要介绍 Android 开发中的 关机 部分知识点,通过阅读本篇文章,您 ...

  7. Android系统关机和重启

     一. 发送系统广播方式 Broadcast是Android的四大基本组件之中的一个.也就是我们常说的广播.Android系统本身就包括了很多广播,时时刻刻在监听着系统中注冊的每个广播并随时准备响应操 ...

  8. 高通平台开发系列讲解(系统篇)系统关机流程

    文章目录 一.关机流程图 二.执行关机流程 2.1.kernel_shutdown_prepare流程 2.2.migrate_to_reboot_cpu流程 2.3.syscore_shutdown ...

  9. 获取Android系统关机时间

    在写Android测试代码的时候需要获取系统的关机时间,可以通过监听关机广播实现. 广播监听类不能写在androidTest目录下,需要在辅助apk中实现,这样在运行测试类时就可以获取关机时间 添加步 ...

最新文章

  1. 管理中应避免“妇人之仁”
  2. Qt QProces的使用
  3. excel实战应用案例100讲(十四)-Excel可直接分析的大数据语义层
  4. Grace Ex助力区块链数字资产迈向全新未来
  5. 5G 时代,优酷推出的帧享究竟是什么?
  6. 使用Android OpenGL ES 2.0绘图之四:应用投影和相机视图
  7. 阅读VDN:Value-Decomposition Networks For Cooperative Multi-Agent Learning Based On Team Reward
  8. BaseHTTPRequestHandler,HTTPServer
  9. novoton-msys_init函数
  10. 矩形类的定义(java)
  11. 道德经和译文_道德经全文和译文
  12. 基于Elasticsearch 实现站内全文搜索
  13. 【华人学者风采】黄维 西北工业大学
  14. 32 | KafkaAdminClient:Kafka的运维利器
  15. QT QDateTime获取当前时间且分出年月日时分秒
  16. perl中bless的理解(zz) z
  17. 小程序集成网易云通信群聊功能Demo发布
  18. CodeForces103B - Cthulhu 解题报告
  19. 快速扩展在线文档产品特性的9个开源项目
  20. bak文件转换成sql文件_将BAK文件还原到SQL数据库!

热门文章

  1. 作业2018.12.9日,第2题:编程计算1-50中7的倍数之和
  2. Linux命令-ps
  3. 关于zeo作品中生成代码使用方法的说明!
  4. 海尔推出空气盒子的背后阳谋
  5. 单细胞注释之坑-通过AddModuleScore注释细胞
  6. 光纤之父高锟离世,享年 84 岁;Linux CoC 引争议,贡献者威胁撤销代码
  7. 【前端进阶】-TypeScript高级类型 | 泛型约束、泛型接口、泛型工具类型
  8. 升讯威微信营销系统开发实践:目录
  9. 华为HCIE云计算之Fusion Access桌面云
  10. 用户管理(一):使用shell脚本批量添加指定数量的用户