您的位置:首页 > 职场人生

android面试题

2016-08-02 18:02 260 查看

1、屏幕适配

1)首先了解几个重要的概念

A、屏幕尺寸:屏幕对角线的长度,1英寸=2.54cm

B、屏幕分辨率:横纵向上像素点数,单位px

C、屏幕像素密度:每英寸上像素点的个数,单位dpi,分辨率越高,屏幕像素密度越大

D、dip(dp)、密度无关像素(规定160dp为基准,即1dp=1px、若320dp为1dp=2px)

2)解决方案

A、支持各种屏幕尺寸

a、尽量使用match_parent、wrap_content和weight来确定布局的灵活性,使用weight的使用公式为:原来定义的宽(高)+剩余空间*所占分配的比例

b、使用相对布局,不使用绝对布局(就没用过)

c、使用限定符

B、支持各种屏幕密度

使用密度无关像素dp、提供多种尺寸的图片

C、实施自适应用户界面

a、确定当前布局

b、根据当前布局做出响应

c、重复使用其他活动中的布局

d、处理屏幕配置变化

2、List、Set、Map之间的区别

1)List和Set的父接口为collection

2)List与Set的区别

List有序可重复,Set无序不可重复


3)List的子类

ArrayList:底层是数组、增删改慢、查询快

LinkedList:底层为链表、增删改快、查找慢

ArrayList是线程不安全的,用的比较多的,Vectory是线程不安全的,现在用的比较少


4)Set的子类

TreeSet存储对象具有可比性,有序,需要实现comparable或者comparator接口并重写里面的方法

HashSet去重复需要重写hashCode和equals方法


5)Map的子类

Map存储的是键值对

HashMap的key和values均可以为空

HashTable的key不可以为空


3、java的三大特性

1)封装性:设计一个类的时候用private修饰他的属性,只向外暴露setter和getter方法,来对私有属性进行设置和获取值的操作。

2)继承性:将多个相关的类中共有的特性和行为抽取到一个共通的类中,然后让这些类复用共同类中的这些特性和行为。

3)多态性:父类的引用指向子类的实例,从代码的角度而言,多态是通过方法的重写和重载实现的。

4、ListView的优化方案

1)复用convertview

2)使用viewHolder缓存item条目的引用,目的是减少findViewById的次数

3)分页加载数据,快速滑动的时候不去加载数据

4)避免在自定义的适配器中使用静态的变量

5)使用getApplicationContext防止内存泄漏

6)不要在适配器中使用线程

方法一:将线程的内部类改为静态的内部类,

方法二:在线程内部用弱引用保存Context

5、IntentService的优点

普通的Service是运行在主线程,IntentService是带有异步处理的Service类,异步处理的方法为onHandleIntent(),用来做耗时操作。

6、onSaveInstanceState()

它不是Activity的生命周期,只有当应用遇到意外情况(内存不足、按Home)由系统销毁某个Activity时才会被调用,用来存储一些临时数据;当按返回键时该方法不会被调用;如果要存储一些持久的数据,应在onPause()方法中去完成;在onRestoreInstanceState或者onCreate方法中恢复数据通过bundle参数,在onCreate中要判断bundle是否为空。

7、Intent和PendingIntent的区别

Intent:意图,只要发送就会激活

PendingIntent:延时意图,只有在用户触发或者系统事件触发了某个操作后才会激活组件,最后还是靠意图激活的(通知里面有用到这个东东)

PendingIntent必须和意图对象相关联,否则无法指定要激活的目标

PendingIntent不但可以激活Activity还可以激活BroadCastReceiver和Service

扩展一下:IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收来处理

8、Activity的四种启动模式

1)standard:标准模式,每次启动都会创建Activity并放到回退栈中

2)singleTop:栈顶模式,判断栈顶是否存在该Activity,存在就直接复用,不存在就重新创建

3)singleTask:判断栈中是否存在该Activity,如果存在就将该Activity之上的所有Activity全弹出栈,使其成为栈顶的元素,然后来复用

4)singleInstance:该模式下是在一个新的栈中创建Activity,以后任何的应用在激活该Activity时都会用该栈中的Activity。

9、编程中应注意的一点

在广播和服务中启动Activity必须添加如下的代码:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


10、服务Service的生命周期

后续会更新……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: