大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
上一次说了android的启动原理,这次说下android的进程间的通信。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的淮滨网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
linux 本身是提供了通信机制的。大概有7种左右。然后但是为什么android不用。反而要自己搞一套。主要分析到2个方面: 安全性 和性能。因为前期的移动手机性能不高。还有就是绕开Linux内核的开源限制。
总结就是----避免内核空间到数据接受端的直接的数据拷贝;数据接受端接收数据的时候,由于数据大小不确定,要么分配一个很大的空间装数据,要么动态扩容;两种方式都有问题;Binder使用mmap直接把接受端的内存映射到内存空间,避免了数据的直接拷贝;另外通过data_buffer等方式让数据仅包含定长的消息头,解决了接受端内存分配的问题.
android内部的进程间的通信都是通过binlder 来实现的。这个是很重要的一点。
我们面试问道的 aild Content Provider 调用拨打电话 Intent跳转 其底层都是调用的bindler机制.
关于binlder的运行原理 我只写一个大概。
在其底层的Linux中 /etc/bindler/ 有这个c 文件 就是binlder 的程序文件了。其内部是采用的引用计数器来为何对象。要知道 我们的bindler是支持多进程。如何一个service端要对应多个客户端 也就是说要实现多对多。在看内部源码的时候我发现其内部是用2个红黑树来维持 一个service 对专门提供一个客户端调用。如果还有其他的客户端调用就在生成一个servicebindler 对象来提供调用 然后根据内存管理的引用计数器来回收掉不需要的servicebindler对象。
如果你想深究 我推荐这个
在App运行过程中,我们的视图层级可能会由于用户的操作一直在发生改变,甚至可能会有一些出乎预料的变化,本文将会介绍 如何进行Android视图实时分析,分析View的视图层级及属性变化。
首先,笔者先来一个简单的Demo实例。我们使用Android Studio新建一个Empty Android工程,跑一下程序,界面如下图所示:
接下来,我们要对视图层级进行分析,但分析之前先给各位介绍两个视图分析工具。
1. Android SDK 中 tools 包下的 hierarchyviewer ,最终展现的视图效果如下:
2. Android Studio 也有自带的视图分析工具 Layout Inspector(布局检查器) ,打开方式如下图所示:
可以看到Layout Inspector最右侧的属性栏可以查看 每一个View的所附带的属性及属性值 。
从根视图开始分析视图层级,如下图所示:
DecorView的第一个子View(LinearLayout), 如下图所示:
DecorView的第二个子View(View),如下图所示:
DecorView的第三个子View(View),如下图所示:
至此,DecorView的最外层View全部分析完毕。
接下来,分析DecorView的第一个子View(LinearLayout),如下图所示:
ViewStub的属性信息,如下图所示:
FrameLayout的属性信息,如下图所示:
接下来,继续分析FrameLayout的子View,如下图所示:
ContentFrameLayout的视图属性,如下图所示:
ActionBarContainer的视图属性,如下图所示:
不过,还有个问题需要提醒一下, 不同机型,不同系统主题设置 生成的视图结构可能会不一样,举两个例子:
例一:笔者把使用的模拟器换成自己的手机(360N5 Android 6.0.1) ,运行后视图布局如下:
可以看到 笔者的手机是没有NavigationBar(底部导航栏)的 。
例二:笔者把Activity的主题"Theme.AppCompat.Light.DarkActionBar"换成无标题栏主题"Theme.AppCompat.Light.NoActionBar" ,运行后视图布局如下:
可以看到视图结构与我们之前分析的相比,发生了一些变化。
最后,还有个细节给各位补充下: Layout Inspector 只能分析出Android Studio当前 “正在运行的APP” 的视图布局结构,其他应用的视图布局结构是无法显示的。
如果我们想要分析一个第三方应用(如:微信、QQ)的视图结构可以使用 Android Device Monitor(安卓设备监视器) ,具体打开步骤如下图所示:
以QQ为例,我们先打开手机QQ,显示出QQ主界面,然后按照下图的 "红色圈选" ,依次点击,当前的视图结构就出来了,但是相比于 Layout Inspector 工具,视图属性信息提供的较少...
视图层级分析 到此结束,有时间再补篇源码,分析一下布局加载的流程。
写这篇文章的时候被IOS同事嘲讽了,它们吐槽Android的视图分析工具太渣,最后对比看了下,Android的视图分析工具确实没有IOS的高大上......╮(╯▽╰)╭
最后,秀一下IOS的视图分析工具 Reveal ,如下图所示:
一: HierarchyView
老牌分析工具,在早期的SDK中是有快捷方式的,新版的找不到快捷方式了,后来找了很久才找到入口
首先找到Android Device Monitor
可以进入到sdk的安装目录下 从tools目录下点击monitor.bat 启动 Android Device Monitor
然后找到下图红框位置 点击 HierarchyView 按钮就可以打开 如果没有HierarchyView 按钮就点击DDMS按钮左边的更多按钮,里面会列出来HierarchyView 按钮
HierarchyView 最大的好处是以这种结构树图的方式展示ViewTree 能够一目了然的看清结构,并且可以评估绘制时间
但是在新的android版本里面 HierarchyView会提示找不到Service 遇到这种情况 参照如下文章解决
二:UI Automator
比较常见的工具,在很长一段时间内,找不到HierarchyView用的就是他,但是这个工具不是很好用,有时候显示的层级也不准,可能是我不太会用
入口如下图
点击红框处进入
三:Layout Inspector
入口
打开之后是这个样子
三种工具各有各的特点,大家可以根据自己的需求进行选择