Andorid 详解-布局优化,Android与Linux关系

来源:互联网 发布:mac mini 内置扬声器 编辑:程序博客网 时间:2024/05/29 13:03

这篇文章的由来——闲来无事随便翻找了下Boss 招聘,发现一家公司,在腾讯创业大厦,距离住所很近。最主要的是招聘简介里所介绍的内容:团队成员来自 北大,清华,北邮 BAT等知名网络公司。。。然后我膨胀的自信心,想尝试下看看自己的水平,抽了一天调休,就过去了。结果 被完虐,各种完虐,第一个问题,是技术总监提出来的。
Android和Linux的关系
Android基于Linux内核 我印象中的答案。
还有呢! 沉默,然后 技术总监有问了几个其他问题: 没太记住,例如什么算一个应用等等。。自己的计算机基础确实垃圾,我依然保持沉默。然后技术总监就不说话了,旁边的技术就开始询问一些android使用技术相关的问题了。

为了加深印象,我百度下了Android 于 Linux的关系。

虽然android基于Linux内核,但是它和linux之间有很大的差别,比如Android在linux的基础上添加了自己所持有的驱动程序。先从linux的特性上看,Android为什么选择Linux内核1、强大的内存管理,和进程管理方案。2、基于权限的安全模式3、支持共享库4、经过认证的驱动模式5、Linux本身就是一个开源项目

那么 Anroid 不是 linux
1、没有本地窗口系统(没有glibc的支持)GNU发布运行的Libc库。glibc是linux系统中最底层的api

什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac OS的Quartz等。不同的操作系统的窗口系统可能不一样,Android并没有使用(也不需要使用)Linux的X窗口系统,这是Android不是Linux的一个基本原因。

2、它并不包含一整套标准的Linux使用程序

由于Android最初用于一些便携的移动设备上,所以,可能出于效率等方面的考虑,Android并没有采用glibc作为C库,而是Google自己开发了一套Bionic Libc来代替glibc。

3、它增强了Linux以支持其特有的驱动

到此打住,下面会是技术开发询问的一些Andorid问题,一些回答上来了,一些知道但是说不出来(相信你们也会有我这样的困境,作为一个IT从业人员,英语问题,绝对是致病问题),这里我就不场景植入我的回答了,贴出来点网上查找了一些标准答案。

第一题: 程序优化
布局优化

优化布局层级:        基本原则;在android系统中,对不view进行测量绘制时,都是对view数的遍历操作。如果view的层级太多,就会严重影响测量布局绘制的速度。Google也在API文档中提到View的层级不宜超过10层,早起Google在Android中使用LinearLayout做为默认的跟布局,现在android默认的事RelativeLayout,原因就是减少布局层级的原因。android提供 <include> <marge> <Viewstub>使用<include>标签重用layout布局,没啥说的。<marge>标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用<merge/>标签优化。
    <merge xmlns:android="http://schemas.android.com/apk/res/android">          <Button              android:layout_width="fill_parent"               android:layout_height="wrap_content"              android:text="@string/add"/>          <Button              android:layout_width="fill_parent"               android:layout_height="wrap_content"              android:text="@string/delete"/>      </merge>  
<ViewStub> 懒加载布局,android提供了ViewStub一个非常轻量级控件。(为什么:它没有大小,没有绘制功能,也不参与布局,资源消耗非常低)可以在需要的时候进行加载。并且ViewStub只能infalte一次,之后就会被制空,(所以使用场景 是一个布局在infalte之后就不会进行操作,例如:列表加载数据,为空数据的时候,显示的默认图片)必然view被长期引用,占用内存。另外注意:ViewStub只能引用布局,没办法直接引用控件、可以在布局里面添加控件。
<ViewStub       android:id="@+id/viewstub_demo_image"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_marginLeft="5dip"      android:layout_marginRight="5dip"      android:layout="@layout/布局文件"/>  `
        ViewStub stub = (ViewStub) findViewById(R.id.viewstub_demo_text);          stub.inflate();          TextView text = (TextView) findViewById(R.id.viewstub_demo_textview);          text.setText("改变文字");  

以上就是andorid 提供的标签,来简化布局层级,但是在开发中,为了保证的开发进度,一般不会在初次写的时候就注意使用这些标签。也可能是我并没有养成一个很好的习惯。那么肯定会有一个返工的过程。返工过程中,再次看自己写的代码。会有一种疑惑,这麻痹是我写的吗?

这个时候就需要一个 来帮助我们优化布局的工具了
HierarchyViewer
Hierarchy Viewer是随Android SDK发布的工具,位于Android SDK/tools/hierarchyviewer.bat

具体可百度