人物

Android面试17个知识点总结宝典vn77.com澳门威尼斯人

字号+ 作者:vn77.com澳门威尼斯人 来源:未知 2017-12-21 19:44 我要评论( )

vn77.com澳门威尼斯人让用户体验前所未有的娱乐享受,澳门威尼斯人vn77并且在视觉上能够有最真实的感受,威尼斯人娱乐场官网进行注册无需认证直接进入游戏! Service:常用于为其他组件供给后台办事或者监控其他组件的运转形态。经常用来施行一些耗时操做。 sing

vn77.com澳门威尼斯人让用户体验前所未有的娱乐享受,澳门威尼斯人vn77并且在视觉上能够有最真实的感受,威尼斯人娱乐场官网进行注册无需认证直接进入游戏!

  Service:常用于为其他组件供给后台办事或者监控其他组件的运转形态。经常用来施行一些耗时操做。

  singleTop:若是某个Activity本人激活本人,即便命栈栈顶就是该Activity,则不需要建立,其余环境都要建立Activity实例;

  通过findFragmentByTag或者getActivity获得对方的援用(强转)之后,再彼此挪用对方的public方式,可是如许做一是引入了“强转”的丑恶代码,别的两个类之间各自持有对方的强援用,耦合较大,容易形成内存泄露。

  操纵eventbus进行通信,这种方式及时性高,并且Activity取Fragment之间能够完全解耦。

  当地办事,属于统一个使用法式,通过startService来启动或者通过bindService来绑定而且获代替理对象。若是只是想开个办事正在后台运转的话,间接startService即可,若是需要彼此之间进行传值或者操做的话,就该当通过bindService。

  Service默认是运转正在main线程的,因而Service中若是需要施行耗时操做(大文件的操做,数据库的拷贝,收集请求,文件下载等)的话该当正在子线程中完成。

  由于屏幕的刷新频次是60Hz,大要16毫秒会刷新一次,所认为了包管UI的流利性,耗时操做需要正在子线程中处置,子线程不克不及间接对UI进行更新操做。因而需要Handler正在子线程策动静给从线程来更新UI。

  这里再深切一点,Android中的UI控件不是线程平安的,因而正在多线程并发拜候UI的时候会导致UI控件处于不成预期的形态。Google欠亨过锁的机制来处置这个问题是由于:

  因而,Google的工程师最初是通过单线程的模子来操做UI,开辟者只需要通过Handler正在分歧线程之间切花就能够了。

  Android中的动静机制次要是指Handler的运转机制。Handler是进行线程切换的环节,正在从线程和子线程之间切换只是一种比力特殊的利用情景罢了。此中动静传送机制需要领会的工具有Message、Handler、Looper、Looper里面的MessageQueue对象。

  Handler就是工人。可是这么比方不太得当,由于发送以及最终处置Message的都是Handler

  Handler的工做是依赖于Looper的,而Looper(取动静队列)又是属于某一个线程(ThreadLocal是线程内部的数据存储类,通过它能够正在指定线程中存储数据,其他线程则无法获取到),其他线程不克不及拜候。因而Handler就是间接跟线程是绑定正在一路了。因而要利用Handler必必要包管Handler所建立的线程中有Looper对象而且启动轮回。由于子线程中默认是没有Looper的,所以会报错。

  使用法式的入口是ActivityThread的main方式,正在这个方式里面会建立Looper,而且施行Looper的loop方式来启动动静的轮回,使得使用法式一曲运转。

  能够。有时候出于营业需要,从线程能够向子线程发送动静。子线程的Handler必需按照上述方式建立,而且联系关系Looper。

  事务老是从上往下进行分发,即先达到Activity,再达到ViewGroup,再达到子View,若是没有任何视图耗损事务的话,事务会顺着路径往回传送。此中:

  dispatchTouchEvent是事务的分发方式,若是事务可以或许达到该视图的话,就起首必然会挪用,一般我们不会去点窜这个方式。

  若是事务从上往下传送过程中一曲没有被遏制,且最底层子View 没有消费事务,事务会反神驰上传送,这时父View(ViewGroup)能够进行消费,若是仍是没有被消费的话,最初会到Activity 的onTouchEvent()函数。

  EXACTLY模式:切确模式,对应于用户指定为match_parent或者具体大小的时候(现实上指定为match_parent本色上是指定大小为父容器的大小)

  AT_MOST模式:对应于用户指定为wrap_content,此时控件尺寸只需不跨越父控件答应的最大尺寸即可。

  View绘制,次要是通过Android的2D画图机制来完成,机会是onDraw方式中,此中包罗画布Canvas,画笔Paint。下面给出示例代码。相关API不是引见的沉点,沉点是Canvas的save和restore方式,通过save当前能够对画布进行一些放大缩小扭转倾斜等操做,这两个方式一般配套利用,此中save的挪用次数能够多于restore。

  取结构位置相关的是onLayout方式的复写,一般我们自定义View的时候,只需要完成丈量,绘制即可。若是是自定义ViewGroup的话,需要做的就是正在onLayout中丈量本身以及节制子控件的结构位置,onLayout是自定义ViewGroup必需实现的方式。

  利用ViewStub来进行结构的延迟加载一些不是顿时就用到的结构。例如列表页中,列表正在没有拿到数据之前不加载,如许做能够使UI变得流利。

  IntentService正在内部其实是通过线程以及Handler实现的,当有新的Intent到来的时候,会建立线程而且处置这个Intent,处置完毕当前就从动销毁本身。因而利用IntentService可以或许节流系统资本。

  避免Bitmap的华侈,该当尽量去适配屏幕设备。尽量利用成熟的图片加载框架,Picasso,Fresco,Glide等。

  其他建议:尽量罕用列举变量,尽量罕用笼统,尽量少添加类,避免利用依赖注入框架,隆重利用library,利用代码混合,时就地合考虑利用多历程等。

  避免内存泄露(本来该当被收受接管的对象没有被收受接管)。一旦APP的内存短时间内快速增加或者GC很是屡次的时候,就该当考虑能否是内存泄露导致的。

  资本释放问题:法式代码的问题,持久连结某些资本,如Context、Cursor、IO 流的援用,资本得不到释放形成内存泄露。

  对象内存过大问题:保留了多个耗用内存过大的对象(如Bitmap、XML 文件),形成内存超出限制。

  static 环节字的利用问题:static 是Java 中的一个环节字,当用它来润色成员变量时,那么该变量就属于该类,而不是该类的实例。所以用static 润色的变量,它的生命周期是很长的,若是用它来援用一些资本花费过多的实例(Context 的环境最多),这时就要隆重看待了。

  线程导致内存溢出:线程发生内存泄露的次要缘由正在于线程生命周期的不成控。例如Activity中的Thread正在run了,可是Activity因为某种缘由从头建立了,可是Thread仍然会运转,由于run方式不竣事的话Thread是不会销毁的。

  处理方案 1. 将线程的内部类,改为静态内部类(由于非静态内部类具有外部类对象的强援用,而静态类则不具有)。 2. 正在线程内部采用弱援用保留Context 援用。

  android官方供给的东西:Memory Monitor(当APP占用的内存正在短时间内快速增加或者GC变得屡次的时候)、DDMS供给的Heap东西(手动触发GC)

  Square供给的内存泄露检测东西,LeakCanary(可以或许从动完成内存逃踪、检测、输出成果),进行演示,而且恰当的讲解。

  通过TraceView进行数据的采集以及阐发。正在有大要定位的时候,利用Android官方供给的Debug类进行采集。最初通过DDMS即可打开这个.trace文件,阐发函数的挪用环境(包罗正在指定环境下施行时间,挪用次数)

  App资本中尽量罕用大图。利用Bitmap的时候要留意等比例缩小图片,而且留意Bitmap的收受接管。

  处理方案: 1. UI线程只进行UI相关的操做。所有耗时操做,好比拜候收集,Socket 通信,查询大量SQL 语句,复杂逻辑计较等都放正在子线程中去,然后通过handler.sendMessage、runonUITread、AsyncTask 等体例更新UI。 2. 无论若何都要确保用户界面操做的流利度。若是耗时操做需要让用户期待,那么能够正在界面上显示进度条。 3. BroadCastReceiver要进行复杂操做的的时候,能够正在onReceive()方式中启动一个Service来处置。

  点九图,是Android开辟顶用到的一种特殊格局的图片,文件名以”.9.png“结尾。这种图片能告诉法式,图像哪一部门能够被拉升,哪一部门不克不及被拉升需要连结原有比列。使用点九图能够包管图片正在不恍惚变形的前提下做到自顺应。点九图常用于对话框布景图片中。

  1、2部门划定了图像的可拉伸部门,当现实法式中设定了对线部门就会被拉伸成所需要的高和宽,呈现出于设想稿一样的视觉结果。

  HttpURLConnection:正在Android 2.2版本之前,HttpClient具有较少的bug,因而利用它是最好的选择。而正在Android 2.3版本及当前,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因此很是合用于Android项目。压缩缓和存机制能够无效地削减收集拜候的流量,正在提拔速度和省电方面也起到了较大的感化。对于新的使用法式该当愈加方向于利用HttpURLConnection,由于正在当前的工做傍边我们也会将更多的时间放正在优化HttpURLConnection上面。特点:比力简便,矫捷,易于扩展,正在3.0后以及4.0中都进行了改善,如对HTTPS的支撑,正在4.0中,还添加了对缓存的支撑。

  HttpClient:高效不变,可是维护成本昂扬,故android 开辟团队不情愿正在维护该库而是转投更为简便的

  volley:晚期利用HttpClient,后来利用HttpURLConnection,是谷歌2013年推出的收集请求框架,很是适合去进行数据量不大,但通信屡次的收集操做,而对于大数据量的收集操做,好比说下载文件等,Volley的表示就会很是蹩脚。

  Retrofit:和Volley框架的请求体例很类似,底层收集请求采用okhttp(效率高,android4.4底层采用okhttp),采用注释体例来指定请求体例和url地址,削减了代码量。

  Picasso:PicassoSquare的收集库一路能阐扬最大感化,由于Picasso能够选择将收集请求的缓存部门交给了okhttp实现。

  Glide:仿照了Picasso的API,并且正在他的根本上加了良多的扩展(好比gif等支撑),支撑图片流,因而正在做爱拍之类的视频使用用得比力多一些。

  Fresco:Fresco中设想有一个叫做image pipeline的模块。它担任从收集,从当地文件系统,当地资本加载图片。 为了最大限度节流空间和CPU时间,它含有3级缓存设想(2级内存,1级文件)。Fresco中设想有一个叫做Drawees模块, 便利地显示loading图,当图片不再显示正在屏幕上时,及时地释放内存和空间占用。

  Heap-堆内存:Android中每个App的 Java堆内存大小都是被严酷的限制的。每个对象都是利用Java的new正在堆内存实例化,这是内存中相对平安的一块区域。内存有垃圾收受接管机制,所以当 App不正在利用内存的时候,系统就会从动把这块内存收受接管。倒霉的是,内存进行垃圾收受接管的过程恰是问题所正在。当内存进行垃圾收受接管时,内存不只仅进行了垃圾收受接管,还把 Android 使用完全终止了。这也是用户正在利用 App 时最常见的卡顿或短暂假死的缘由之一。

  Ashmem:Android 正在操做 Ashmem 堆时,会把该堆中存无数据的内存区域从 Ashmem 堆中抽取出来,而不是把它释放掉,这是一种弱内存释放模式;被抽取出来的这部门内存只要当系统实正需要更多的内存时(系统内存不敷用)才会被释放。当 Android 把被抽取出来的这部门内存放回 Ashmem 堆,只需被抽取的内存空间没有被释放,之前的数据就会恢复到响应的位置。

  不管发生什么,垃圾收受接管器都不会从动收受接管这些 Bitmap。当 Android 绘制系统正在衬着这些图片,Android 的系统库就会把这些 Bitmap 从 Ashmem 堆中抽取出来,而当衬着竣事后,这些 Bitmap 又会被放回到本来的位置。若是一个被抽取的图片需要再绘制一次,系统仅仅需要把它再解码一次,这个操做很是敏捷。

  保守点的方式就是往同步代码块里些数据,然后利用回调让别的一条线程去读。正在Android里我一般会建立Looper线程,然后Hanlder传送动静。

  可以或许缓存起来的尽量去缓存起来,减轻办事器的压力。例如APP中首页的一些数据,又例如首页的图标、案牍都是缓存起来的,并且这些数据通过收集来指定能够使app具有更大的矫捷性。

  毗连复用、请求归并、请求数据Body能够操纵压缩算法Gzip来进行压缩,利用JSON 取代 XML

  这块领会的不多。我给你说说我的思绪吧,操纵哈希算法,好比MD5,办事器给我们的数据能够通过时间戳和其他参数做个加密,获得一个key,正在客户端取出数据后按照数据和时间戳再去生成key取办事端给的做个对比。

  RXJava:一个异步请求库,焦点就是异步。操纵的是一种扩展的察看模式,被察看者发生某种变化的时候,能够通过事务(onNext、、onComplete)等体例通过察看者。RXJava同时支撑线程的安排和切换,用户能够指定订阅发生的线程以及察看者触发的线程。

  Retrofit:通过注释的体例来指定URL、请求方式,本色上底层是通过OKHttp来实现的。

转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评