Android 面试总结

来源:互联网 发布:pc端护眼软件 编辑:程序博客网 时间:2024/04/30 17:01

  最近一直都在面试,只有把找工作当做一种工作认真对待的时候我才觉得自己这一天没有荒废。不去想未来有多远,活在当下做最好的自己就心满意足了。
  说下面试吧,以后一点点记录。
1、Activity与Fragment的区别,什么情况下使用Activity什么情况下使用Fragment

(1)从fragment出现:fragment的一开始主要是为了解决平板的空间利用问题的,因此fragment能够更好的利用空间资源。
(2)fragmnet生命周期:从fragment生命周期可以看出来fragment必须依赖于activity,fragment通过onattach方法进行绑定Activity。fragment生命周期:onAttach—onCreate—onCreateView—onAcitivityCareated——onStart—onResume—运行—onPause—onStop—onDestoryView—onDestory。
(3)使用方面:①fragment可以在xml文件布局中编写,使用起来更加灵活,Activity则不能。②fragment加载布局是通过inflater.inflate进行加载的而Activity是通过seContentView加载布局的。③fragment可以在一个界面上灵活的替换一部分页面,Activity不可以。
(4)如果一个界面特别难实现的时候就可以用fragment。

2、View 与PopupWindow和Window的区别

(1)View是所有控件的父类,包含了ViewGroup和ImageButton等子控件。
(2)PopWindow类似弹出框吧,(我也不知道区别在哪里,不说又很尴尬,所以可以说下PopWindow与AlertDialog区别)
AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。
(3)Window是主窗口,具体内容由phonewindow实现。

3、Service运行在主线程还是子线程?
主线程(可以通过在service中获取主线程id进行判断)
4、Handler消息机制
Handler消息机制分为4部分
(1)Handler本身:发送和处理消息
(2)Message:消息载体
(3)MessageQueue:消息队列
(4)Looper:轮询器
Handler发送消息Message之后,消息被放到MessageQueue消息队列中,Looper轮询器会不断进行轮询,当有消息需要处理时就会拿给handler,handler进行处理。但是使用时如果当前线程不是主线程,需要在子线程中创建looper轮询器调用looper.prepare

5、SharedPrefrence与Sqlite区别

二者都是轻量级的,都可以进行数据存储。其中SharedPrefrence是以xml文件形式进行存储,且存储的数据类型为基本数据类型,一般用于存储一些琐碎的数据比如用户名密码。Sqlite除了提供基本的存储类型外还提供了Blob类型数据存储,可以自己定义存储类型。
6、说下线程的几种实现方式

线程实现方式主要有三种:继承Thread、实现Runnable接口、实现Callable接口。
Runnable接口相比继承Thread类有如下好处:
避免继承的局限,一个类可以继承多个接口。适合于资源的共享。
Callable与Runnable的区别在于它可以传递一个返回值。

   
 7、RelativeLayout与LinearLyout哪个性能更好

在没有weight属性的情况下LinearLayout更好,这是因为LinearLayout源码中测量控件部分分为了水平和垂直两种情况,而RelativeLayout则不是。
   
  8、讲一下自定义控件

自定义控件方面主要是根据需求:
(1)组合式控件:比较简单,继承linearlayout之类的父布局然后通过inflate进来某个布局,addView就可以了。
(2)自定义View:继承View或者Button控件,写两个构造器,之后重写onMeasure和onDraw方法。在onMeasure方法测量并返回宽高,在onDraw方法中进行绘制。
(3)自定义ViewGroup:与自定义View相似,需要写两个构造器,并重写onMeasure,onDraw,onLayout三个方法。onLayout方法是父布局对子布局放置位置的方法。
 9、ArrayList与LinkedList区别

这里加上Vector三者一起区别:
1、ArrayList与Vector都是以数组的形式保存集合中元素的。二者的显著区别在于Vector实现了线程同步,因此Vector是线程安全的,ArrayList是线程不安全的,但是因为Vector实现了线程安全保证了数据同步,导致它的性能不如ArrayList。
2、LinkedList是以链表的形式保存集合中元素的。相当于一个双端队列。
三者区别:(这个可以从数组与链表的存储方面考虑,学过数据结构应该比较好理解)ArrayList和Vector更适合随机访问集合元素,但是在插入和删除数据方面性能交差,LinkedList在随机访问集合元素方面性能较差,但是在插入和删除数据方面性能比较好,因为它是链表的形式存储。
 
 9、多线程与异步的区别

多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。
异步操作的优缺点
  因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少共享变量的数量),减少了死锁的可能。当然异步操作也并非完美无暇。编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些初入,而且难以调试。
多线程的优缺点
  多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。
http://www.cnblogs.com/ydhliphonedev/archive/2011/09/22/2185455.html
 
10、HashMap与HashTable的区别

二者都是Map接口的实现类。
HashMap:线程不安全,所以性能比HashTable高,key或者value值可以为null
HashTable:线程安全,性能低,key与values值不能为null
 
11、ThreadLocal

ThreadLocal,是Thread Local Variable(线程局部变量)的意思,它的功能很简单,就是为每一个使用该变量的线程都提供一个变量的副本,使每一个线程都能独立地改变自己的副本,而不会和其他线程的副本冲突,从线程的角度将就好像每一个线程都完全拥有该变量一样。
 
 PS:有些知识点我觉得比较简单的基础的就没写

4 0
原创粉丝点击