面试知识点总结01
1.Android 版本Bug
想必使用过 Android 5.0.1 系统的用户对内存泄露 bug 不会感到陌生,此缺陷不仅会导致内存占用过高,还会进而致使应用及其后台进程被强制关闭,甚至是系统界面崩溃等。
内存泄露
信息泄露
流量泄露
2.ArrayList 和LinkList的区别
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 ,但是缺点就是查找非常麻烦 要丛第一个索引开始。
通俗理解: 你可以把 ArrayList看做是一个大小长度可变的数组来使用~~~ 一般情况也常用这个做查询操作;
LinkedList呢 他其实是一种链表形式的容器,插入删除很方便 。
3.Service的生命周期以及Banding Service 和 Start Service 的区别?
service根据不同的启动方式会展现出不同的生命周期:
如果以onStart()方式: context.startService() ->onCreate()- >onStart()->Service running context.stopService() | ->onDestroy() ->Service stop
如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。
该Service的调用者再启动起来后可以通过stopService关闭Service。 所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy
如果以onBInd()方式:
使用使用context.bindService()启动Service会经历:
context.bindService()->onCreate()->onBind()->Service running
onUnbind() -> onDestroy() ->Service stop
onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。 这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。
所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
onStart()的方式一般用以本地服务的调用,Activity与Service不需要交互,调用者与Service无任何关系 如果以onBInd()方式:远程调用,Activity与Service会有交互,调用者与Service绑定在一起。
注意:Service需要在清单文件中进行配置才能使用。
关于四大组件: http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html 这个帖子写的很好。
4.res/raw和assets目录的区别
答: 二者的相同点:都会直接原封不动的保存在APK中而不会被编译成二进制文件
不同点:
1.raw目录下,不能存在文件,而不能包含文件夹。而assets可以包含下一级的文件夹
2.raw目录下的资源会映射到R.java下生成资源ID,assets不会。
3.获得资源的方法不同如下:
this.getAssets().open("xml/channels.xml");
this.getResources().openRawResource(R.raw.students);
this.getClassLoader().getResourceAsStream("students.xml");
5.String与StringBuffer,StringBuilder的区别
1.三者在执行速度方面的比较: StringBuilder>StringBuffer>String
2.String执行速度最慢的原因 String :字符串常量 StringBuffer:字符串变量 StringBuilder:字符串变量 由上可知:string是字符串常量也就是不可改变的对象,
如: String str1 ="Hello";
str1 = str1+"wolrd";
syso(str1);---->Helloworld;
虽然输出是这样,但是内部实现是:首先创建一个对象str1,然后在创建一个新的对象str1来合并操作, 而原来的对象被GC回收掉。
而StringBuffer和StringBuilder则是在原来的对象上进行操作。 StringBuffer有一个方法:append(),添加字符串;
2.线程安全性:
StringBuffer是线程安全的
StringBuilder 是线程非安全的;
对于三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
6. .9.PNG是干什么的?怎么使用?
9png图片一般用在需要拉伸的地方,比如聊天程序的对话框,字数不同,对话框的大小也不同。
所以就有了9png,之所以叫9是因为图片被分割为9个部分。
//目前制作还不是太理解。。。