Android面试必备

Android基础(16 - 30)

2018-04-08  本文已影响250人  街头客

目录

16,自定义View如何考虑机型适配(重要);
17,Handler机制(重要);
18,ListView中图片错位的原理和解决方法(重要);
19,ApplicationContext和ActivityContext的区别(重要);
20,Service与Activity之间通信的几种方式;
21,LinearLayout和RelativeLayout性能对比(重要);
22,优化自定义view(重要);
23,了解ContentProvider(重要);
24,数组和链表的区别;
25,如何安全的退出一个已经开启多个activity的APP?
26,Android系统的有哪些安全机制?
27,Asset目录与res目录的区别;
28,Binder机制;
29,分块加载巨图;
30,广播分为几种方式?

16,自定义View如何考虑机型适配(重要):

17,Handler机制(重要):

Handler包括四个角色:

在主线程创建Handler,在需要发送消息的地方创建一个Message,通过handler发送。这个消息回到MessageQueQue中,然后Looper会将这个消息取出交给handler处理。

Handler可以有多个,但是在同一线程中Looper和MessageQueQue只能有一个。

18,ListView中图片错位的原理和解决方法(重要):

错位分析:

解决方法:
对imageview设置tag,并预设一张图片,向下滑动后,item8显示,item1隐藏。但由于item1是第一次进来就显示,所以一般情况下,item1都会比item8先下载完,此时可见的item8的tag和隐藏了的item1的url不匹配,所以就算item1的图片下载完也不会显示到item8中,因为tag标识的永远是可见图片中的url。

19,ApplicationContext和ActivityContext的区别(重要):

这是两种不同的context,也是最常见的两种。

至于用哪种context,得看应用场景,个人感觉用Activity的context好一点,不过也有的时候必须使用Application的context.application context。

20,Service与Activity之间通信的几种方式:

21,LinearLayout和RelativeLayout性能对比(重要):

最后再思考一下文章开头那个矛盾的问题,为什么Google给开发者默认新建了个RelativeLayout,而自己却在DecorView中用了个LinearLayout。因为DecorView的层级深度是已知而且固定的,上面一个标题栏,下面一个内容栏。采用RelativeLayout并不会降低层级深度,所以此时在根节点上用LinearLayout是效率最高的。而之所以给开发者默认新建了个RelativeLayout是希望开发者能采用尽量少的View层级来表达布局以实现性能最优,因为复杂的View嵌套对性能的影响会更大一些。

22,优化自定义view(重要):

PS:【转发】自定义的ViewGroup

ViewGroup是容器,用来包含其他控件,而View是真正意义上看得见摸得着的,它需要将自己画出来。ViewGroup需要重写onMeasure方法测量子控件的宽高和自己的宽高,然后实现onLayout方法摆放子控件。而 View则是需要重写onMeasure根据测量模式和父控件给出的建议的宽高值计算自己的宽高,然后再父控件为其指定的区域绘制自己的图形。

23,了解ContentProvider(重要):

【转发】
ContentProvider初探

ContentProvider 自定义ContentProvider

24,数组和链表的区别:

数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。

链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。

25,如何安全的退出一个已经开启多个activity的APP?

在Application中持有一个全局的集合(List),进而在其onCreate()方法添加到这个集合,最终遍历所有的activcity并finish。

ActivityCompat.finishAffinity(this);

26,Android系统的有哪些安全机制?

应用程序签名机制,权限申明机制,访问控制机制,进程通讯机制,内存管理机制。

27,Asset目录与res目录的区别:

区别

【转发】
Asset目录与res目录的区别

28,Binder机制:

Binder是Android的系统进程通许方式之一简称IPC;
Binder使用Clinet->Server通讯方式,Binder框架定义的四个角色,Server,Client,ServiceManager,以及Binder驱动,其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间,Binder驱动程序提供Dev/binder与用户空间交互,Server,Client,ServiceManager,通过open和ioctl文件操作函数和Binder交互。

【转发】
Binder原理

29,分块加载巨图:

图片分块加载
图片的分块加载在地图绘制的情况上最为明显,当想获取一张尺寸很大的图片的某一小块区域时,就用到了图片的分块加载,在Android中BitmapRegionDecoder类的功能就是加载一张图片的指定区域。BitmapRegionDecoder类的使用非常简单,API很少并且一目了然,如下:

// 创建实例
mDecoder = BitmapRegionDecoder.newInstance(mFile.getAbsolutePath(), false);

// 获取原图片宽高
mDecoder.getWidth();
mDecoder.getHeight();

// 加载(10, 10) - (80, 80) 区域内原始精度的Bitmap对象
Rect rect = new Rect(10, 10, 80, 80);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;

Bitmap bitmap = mDecoder.decodeRegion(rect, options);

// 回收释放Native层内存
mDecoder.recycle();

【转发】
Android 高清加载巨图方案 拒绝压缩图片

30,广播分为几种方式?

三种方式:

【转发】
Broadcast 三种广播的使用总结

上一篇下一篇

猜你喜欢

热点阅读