android进程模型:

在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应的权限,这样其它应用程序就不能访问此应用程序所拥有的数据和资源了。

在 Linux 中,一个用户ID 识别一个给定用户;在 Android 上,一个用户ID 识别一个应用程序。

应用程序在安装时被分配用户 ID,应用程序在设备上的存续期间内,用户ID 保持不变。

默认情况下,每个apk运行在它自己的Linux进程中。当需要执行应用程序中的代码时,Android会启动一个jvm,即一个新的进程来执行,因此不同的apk运行在相互隔离的环境中。

下图显示了:两个 Android 应用程序,各自在其自己的基本沙箱或进程上。他们是不同的Linux user ID。

开发者也可以给两个应用程序分配相同的linux用户id,这样他们就能访问对方所拥有的资源。

为了保留系统资源,拥有相同用户id的应用程序可以运行在同一个进程中,共享同一个jvm。

如下图,显示了两个 Android 应用程序,运行在同一进程上。

不 同的应用程序可以运行在相同的进程中。要实现这个功能,首先必须使用相同的私钥签署这些应用程序,然后必须使用 manifest 文件给它们分配相同的 Linux 用户 ID,这通过用相同的值/名定义 manifest 属性 android:sharedUserId 来做到。

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没有响应用户请求,会弹出对话框提醒用户终止应用程序。


更多相关文章

  1. Android(安卓)M 新的运行时权限开发者需要知道的一切
  2. Android内存管理的原理--进程管理
  3. 曼妙琳珑心 Android(安卓)面试题(2)
  4. (2) Android中Binder调用流程 --- Binder环境的初始化
  5. Android普及入门
  6. Android新手入门 FAQ
  7. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程
  8. 如何发布你的Android应用程序
  9. Android数据传递相关内容概述

随机推荐

  1. Android消息处理机制:源码剖析Handler、Lo
  2. Android(安卓)activity 四个启动模式的作
  3. Android(安卓)开机速度优化-----ART 预先
  4. Android(安卓)应用安全开发总结
  5. Android(安卓)开发必读:如何成为一名优秀
  6. OkHttp基础概念解释
  7. Android(安卓)—— 静态AsyncTask解决内
  8. day4.16总结_消息通讯
  9. Android(安卓)获取并显示远程图片 Picass
  10. Android服务注册完整过程源码分析