android
来源:互联网 发布:大闹天空广翼进阶数据 编辑:程序博客网 时间:2024/06/18 16:23
Android是基于Linux的一个操作系统,它可以分为五层,下面是它的层次架构图
Android的五层架构从上到下依次是应用层,应用框架层,库层,运行时层以及linux内核层。
Linux是基于C的,而Android是基于Java的(当然底层也是C)。所以这里就会fork出一个Zygote Java进程用来fork出其他的进程。Zygote进程是所有Java进程的父进程。
ActivityManagerServices(AMS):
它是一个服务端对象,负责所有的Activity的生命周期,ActivityThread会通过Binder与之交互,而AMS与Zygote之间进行交互则是通过Socket通信
AMS & WMS,应该是app端打交道最多的2个framwork层的service。
ActivityManagerService 是android提供给用于管理Activity运行状态的系统进程。
AMS 主要用于管理Activity之间的交互问题。
核心问题有以下几个:
1.activity 生命周期管理
2.intent是怎么传递数据的。(可能跨进程,以及双向传递)
3.launchmode是怎么使用的。(Task的概念)
AMS 是一个同我们开发的service非常相似的一个service,只不过它的作用是管理activity。
所以AMS是一个进程,并且当开机以后,它就常驻在系统里面,归ServiceManager调度。
AMS:android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。实现了IBinder接口,可以用于进程间通信。
ActivityThread:
它也就是我们俗称的UI线程/主线程,它里面存在一个main()方法,这也是APP的真正入口,当APP启动时,就会启动ActivityThread中的main方法,它会初始化一些对象,然后开启消息循环队列(之后总结),之后就会Looper.loop死循环,如果有消息就执行,没有就等着,也就是事件驱动模型(edt)的原理。
ApplicationThread:
它实现了IBinder接口,是Activity整个框架中客户端和服务端AMS之间通信的接口,同时也是ActivityThread的内部类。这样就有效的把ActivityThread和AMS绑定在一起了。
Instrumentation:
这个东西我把它理解为ActivityThread的一个工具类,也算是一个劳动者吧,对于生命周期的所有操作例如onCreate最终都是直接由它来执行的。
AMS与后台杀死
App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候会更加频繁。比如,如果Fragment没有提供默认构造方法,就会在重建的时候因为反射创建Fragment失败而崩溃,再比如,在onCreate里面new 一个FragmentDialog,并且show,被后台杀死后,再次唤醒的时候,就会show两个对话框,这是为什么?其实这就涉及了后台杀死及恢复的机制,其中涉及的知识点主要是FragmentActivity、ActivityManagerService、LowMemoryKiller机制、ActivityStack、Binder等一系列知识点。
推荐阅读:
Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制
Android后台杀死系列之二:ActivityManagerService与App现场恢复机制
Android后台杀死系列之三:LowMemoryKiller原理(4.3-6.0)
Android后台杀死系列之四:Binder讣告原理
Android进程保活-自“裁”或者耍流氓
参考:
android activity 管理器AMS—-概述
【凯子哥带你学Framework】Activity启动过程全解析
Binder系列—开篇
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- 【Webservice】 Eclipse根据wsdl文件自动生成webservice的调用客户端
- 彻底理解webservice SOAP WSDL
- 欢迎使用CSDN-markdown编辑器
- ofbiz添加物品到购物车失败Could not find a valid price for the product with ID [XX-XXXX], not adding to cart.
- 关于帝国cms跳转手机模板代码
- android
- 如何把局域网内不同数据库的两个表的数据进行传输?
- java 书单
- Android开源库V
- JedisPool.getResource()方法卡死的解决办法
- Linux定时任务Crontab不起作用的排查步骤
- 前端胖籽 | ECharts 简单笔记
- 消息队列应用场景
- LINQ使用