您好,欢迎访问三七文档
1.熟练掌握Android四大组件,常用的布局文件等。四大组件:activity:它是用于Android程序与用户交互的窗口,保持各界面的状态,做持久化,管理生命周期,做一些逻辑的跳转service(服务):接收和完成上层指令,为定义好的intent提供同步异步接口ContentProvider(内容提供者):提供数据,向外提供统一接口,可以对数据进行排序整合BroadCast(广播):可以接收多种intent作出发事件,转换成notification,统一了Android事件广播模型常用布局有五种LinearLayout(线性布局):依次排列控件RelativeLayout(相对布局):相对某个元素的位置进行排版FrameLayout(帧布局):控件依次放在坐上角,会重叠,一般用于填充FragmentTableLayout(表格布局):TableLayout去定义它的行TableRow它在去定义它的元素AbsoluteLayout(绝对布局):根据xy轴指定元素位置,局限性比较大,在屏幕旋转时会产生错位ps:呃、有五种其中最长用的是线性和相对布局大部分页面用这两个布局都可以解决,然后就是帧布局,它初始方位是左上角,会重叠显示,一般用于填充Fragment,表格布局就是先定义行,在去定义每行中的元素,一般像计算器这种布局需要使用,绝对布局我是不怎么用,因为他的局限性太大,它是根据XY轴去定义元素的,屏幕旋转的时候会发生错位2.熟悉XML/JSON解析数据,以及数据存储方式。XML解析:saxdompulldom主要使用在PC上开发sax有点是不占内存空间解析方便但是对嵌套多个分支处理不好pull也很省内存而且在J2ME中对节点处理比较好gson解析存储方式SharedPreferences:Android提供用来存储简单的配置信息,用键值的方法存储,它采用xml格式将数据存储到设备中。文件存储:用输入输出流存储,提供了openFileInput()和openFileOutput()方法SQLite数据库:ContentProvider(内容提供者):为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider应用继承了ContentProvider,重写该类的提供数据和存储数据方法它的好处是统一了数据的访问格式网络存储:Android网络了数据包3.熟悉常见Android优化技术,获取网络图片异步加载,分批加载,分页显示listview的优化:listview的复用1.自定义适配器,给contentView设置tag(setTag()),传入一个viewHolder对象,达到图像异步加载的效果,2.用于缓存要显示判断contentView是否为空,如果为空创建view,如果不为空复用之前销毁的view3.档listview需要显示item很多时,可以使用分页加载4.熟练掌握数据通信:线程通信、组件间通信线程通信:Handler机制:它是负责也子线程进行通讯更新主线程UI因为如果在主线程更新UI进行了耗时操作,主线程阻塞5秒会造成ANR异常,所以需要借助Handler机制链接子线程与主线程完成更新UI它的工作原理是:子线程通过Handler创建一条消息,然后通过Handler将消息发送到UI线程对应的消息队列,然后这时候主线程对应的Looper会判断消息队列是否有消息,没有就继续循环等待,有的话UI线程就会调用Handler来处理消息。(图一)Handler在发送Message时,会在它的成员变量target上标记当前handler的引用,所以哪个handler发送的Message,就会由哪个来处理。Looper:一个线程可以产生一个Looper,它在内部维护一个MessageQueue,Looper通过开启一个while(true)死循环来轮询MessageQueue中的Message。当轮询到时就会分发这个Message给handlerMessage方法处理。用来管理该线程里的MessageQueue(消息队列),我们可以构造Handler对象与Looper沟通,以便push新消息到消息队列,或者接受Looper从消息队列中取出的消息MessageQueue(消息队列):是用来存放线程中放入的消息。ANR(ApplicationNotResponding):活动管理器和窗口管理器这两个系统服务负责监视应用程序的相应,当用户操后后5S系统没有给出反应或(BroadcastReceiver)广播接受者在10S内没有执行完毕,就会发生ANR,所以耗时操作,我们应该都放在子线程或者用异步方式来完成组件间通信:Activity与Fragment数据传递:方法一:Fragment中通过getActivity()进行强转,调用Activity中公有的方法getActivity().fun();方法二:Activity在切换Fragment的时候,通过setArguments向Fragment传递参数,Fragment通过getArguments();获得从activity中传来的值;方法三:Activity实现一个接口,Fragment在onAttach方法中将Activity转化为该接口,在需要调用的时候回调。用Fragment的原因是他可以在一个Activity中实现不同的界面,Fragment之间动画切换比Activity中变化方式多。Intent、对象序列化:Intent:它是连接四大组件的桥梁,它是运行时绑定(runtimebinding)机制,它运行是可以连接两个不同组件,分为两种显示Intent:明确指定出目标组件的名称,多应用与程序内部,但是官网建议我们使用隐式Intent。隐式Intent:不会明确指出我们想要启动的哪一个活动,而是指定action和category等信息,交给系统去分析1.action(动作)在清单文件中activity下intent-filter中使用定义所能接受的动作2.category(类别)对象序列化(Serializable):是指将对象转换成字节序列过程,反序列化是把字节恢复成对象的过程应用场景:1.永久性保存对象,保存对象字节序列到本地文件中2.通过序列化对象在网络中传递对象3.通过序列化在进程间传递对象事件总线类框架(EventBus等):接口回调设计:5.了解Socket通信,TCP/IP、HTTP、xmpp等网络协议。Socket是与服务器建立链接后直接进行数据的传输,不需要每次都向服务器发送请求,主要特点是数据丢失率低,使用简单易于移植。实现原理是服务器端:先声明一个ServerSocket对象并制定端口号,调用这个对象的accept()方法用于接收客户端数据,这个方法在没有数据接收时时处于阻塞状态,一旦接收到数据通过inputstream读取接收的数据客户端:先创建一个Socket对象,制定服务器的IP地址和端口号,通过inputstream读取数据,获取服务器发出的数据,最后将要发送的数据写入到outputstream即可进行TCP协议的socket数据传输。TCP/IPIP层收由低层(如以太网设备驱动程序)发来的数据包,吧数据包发送给更高层,TCP层或UDP层TCP是面向连接的通讯协议,通过三次握手建立连接,只能用于端到端的通讯,有高度的可靠性,他会把一台住机发出的字节流无差错的发往互联网上的其他主机TCP/IP参考模型分为四个层次:应用层:TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现传输层:功能是使源端主机和目标端主机上进行会话,他再传输层定义了两种服务质量不同的协议,TCP(传输控制协议)UDP(用户数据报协议)UDP:面向无连接的通讯协议,由于通讯不需要连接,所以可以实现广播发送,它是一个不可靠的、无连接的协议,可能会出现丢包现象,主要面向查询-应答服务,适用于不需要对报文进行排序和流量控制的场合网络互连层:是TCP/IP协议栈的核心,功能是把分组发往目标网络或主机主机到网络层:给它的上传-网络互联层一个访问接口一遍上传IP分组优点:不依赖特定的硬件货操作系统缺点:没有将功能与实现方法区分开,不适合于其他非TCP/IP协议簇。没有将物理层与数据链路层划分。HTTP(超文本传输):简单快速:客户向服务器请求服务时,只需传送请求方法(GET/HEAD/POST)和路径,服务器的程序规模小,通信速度快灵活:允许传输任意类型的数据对象,正在传输的类型有Content-Type加以标记。无连接:限制每次只处理一个请求,处理完请求,并收到客户的应答后,即断开连接,节省传输时间。无状态:是指对于是务处理没有记忆能力,但是如果后续处理需要前面的信息则必须重传,导致每次连接的数据量增大。XMPP:xmpp核心就是xml,xmpp利用xml数据流进行客户端与服务器端的通信,它有一个数据模块负责将xml流解析成Java对象,将Java对象封装成xml流。6.掌握OOM异常的处理,并可以对应用进行相应的优化。Dalvik主要管理内存有javaheap和nativeheap两大块,对于安卓应用来说,手机设备限制,一般应用使用的RAM不能超过某个设定值,如果分配大于该内存,就会报出OutOfMemory错误,不用厂商规定默认值不一样,当Javaheap+nativeheap=默认值时就会报错还有一小块内存用于其他用途如垃圾回收原因:1.应用中要加载大对象,如Bitmap当我们需要显示打的bitmap对象或较多时,就需要进行压缩来防止OOM问题。将BitmapFactory.Optiions的inJustDecodeBounds属性设为true,这样就不会加载图片到内存中,而会将图片的width和height属性读取出来,我们可以利用这个属性对bitmap进行压缩,Options.inSampleSize设置压缩比在Android3.0之后,bitmap对象就直接分配到Javaheap上,因此我们可以服用bitmap内存,而不必回收它。内存溢出和内存泄露的区别,内存泄露是指程序在申请内存时,没有足够的空间供其使用,内存泄露是指程序在申请内存后无法释放已申请内存空间,内存泄露堆积后果很严重,无论多少内存迟早被耗光,memoryleak最终会导致OutOfMemory静态变量导致内存泄露:我们在代码中用静态对象,再不用的时候如果不赋null值,消除对象引用,那么这些对象是很难被垃圾回收的,一旦多了或者较大就容易OOM不合理使用Context导致的内存泄露:在activity中有些地方需要用到context的时候我们经常会把context传递过去,传递过去的context就有可能被延长生命周期,导致内存泄露。(因传递后屏幕旋转导致activity冲击,原先的activity对象不会被回收,因为后台线程还在引用,如果这个activity消耗了比较多的内存,就会因为旧的activity没有被回收而导致内存泄露)非静态内部类导致的内存泄露:和context一样,非静态内部类持有外部类的一个引用,该类生命周期超过外部类的生命周期,就可能引起内存泄露(如AsyncTask和Handler),所以当生命周期较外部类的长的话,就使用静态内部类。Drawable对象的回调隐含的内存溢出:我们为view设置背景的时候,view会在drawable对象上注册一个回调,所以drawable对象就拥有了该view的引用,进而对整个context都有了简介的引用,如果该drawable没有管理好(如设置为静态)就会导致内存泄露7.熟悉Androidhanlder消息机制AsyncTask异步任务机制。AsyncTask在代码上比Handler轻量一些,但是更耗费资源,适用于简单的异步处理定义了三中反省类型参数,Params,Progere和ResultParams启动任务执行的输入参数,比如HTTP
本文标题:技术要点总结
链接地址:https://www.777doc.com/doc-2369476 .html