Android 进程和线程模型

发表于:2012-10-08 10:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:sunboy_2050    来源:51Testing软件测试网采编

  Android进程的知识补充

  下图是标准的Android 架构图

  其中我们可以看到在“Android本地库 & Java运行环境层”中,Android 运行时中,

  Dalvik是Android中的java虚拟机,可支持同时运行多个虚拟机实例;每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例;

  所有java类经过java编译器编译,然后通过SDK中的dx工具转成.dex格式交由虚拟机执行。

  Android系统进程

  init进程(1号进程),父进程为0号进程,执行根目录底下的init可执行程序,是用户空间进程

  ——-> /system/bin/sh

  ——-> /system/bin/mediaserver

  ——-> zygote

  —————–> system_server

  —————–>com.android.phone

  —————–>android.process.acore(Home)

  … …

  kthreadd进程(2号进程),父进程为0号进程,是内核进程,其他内核进程都是直接或者间接以它为父进程

  Android的单线程模型

  当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。

  在开发Android 应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。

  如果在非UI线程中直接操作UI线程,会抛出android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views,这与普通的java程序不同。

  由于UI线程负责事件的监听和绘图,因此,必须保证UI线程能够随时响应用户的需求,UI线程里的操作应该向中断事件那样短小,费时的操作(如网络连接)需要另开线程,否则,如果UI线程超过5s没有响应用户请求,会弹出对话框提醒用户终止应用程序。

  如果在新开的线程中需要对UI进行设定,就可能违反单线程模型,因此android采用一种复杂的Message Queue机制保证线程间通信

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号