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的生命周期
后续会更新……