一、 网络访问:
1. httpurlConnection与httpClient优缺点:<1>两者都是kee-alive<2>httpurlConnection默认使用Gzip压缩数据,提升性能,并且简单易用<3>httpClient api复杂
注:httpurlConnection android2.2版本之前不使用,是因为close后会影响线程池导致链接服用失效
2. java包含4中线程池:
<1>newSingeThread:单一线程即每次都只会new一个线程,其他线程处于等待;
<2>newCacheThread:线程可缓存,当第一个线程执行完毕,第二个线程会复用第一个线程,否则会重开线程,不限制线程数,如果线程池长度超过处理需要,可灵活回收空 闲线程,若无可回收,则新建线程。示例代码如下;
<3>newScheduledThread:线程延迟加载,支持定时及周期性任务,可设置线程数;
<4>newFixedThread:可控制线程最大并发数,超出的线程会在队列中等待;
4中线程都是通过Executors.new出来;
二、缓存:
1. 图片缓存:sdcard,内存
关于图片缓存:<1>控制图片大小,可通过固定值,比如1280x800,来算出适配手机的宽高,并向服务器请求url+width=?&heigth=?
\
2. handler消息缓存:handler.obtainMessage(handler.obtainMessage());
3. 使用bufferBufferedInputStream代替inputstream;使用BufferedReader代替reader;
4. 使用Stringbuffer/StringBuilder代替string
三、布局优化:
1. include:包含一个公共布局,如标题布局;
2. viewstub:当gone时不被解析,一般用于错误提示,网络提示;
3. merge:去掉不必要的节点;
4. 使用RelativeLayout代替LinearLayout;
四、sqlite优化:
1. 只查询指定的字段,减少输出量;
2. 少用cursor.getColumnIndex();
五、数据结构:
1. arraylist:根据inde取值,取值更快,有序排列;
2. linkedlist:更占内存,随机插入删除更快;扩容效果高;
3. hashmap,linkedHashmap,hashSet:hash系列查询速率高;
4. android提供了一些速率更高的,如sparseArray,sparseBooleanArray,sparseIntArray,不过key只能是int整型;
六、调优工具:
1. fidder,网络请求包抓取;
2. sdk/tools下hierarchyviewer.bat,可显示布局,优化布局使用;
3. sdk/tools下monitor.bat最新sdk中代替了traceview.bat,性能调优;
七、全局异常获取:
1.主要使用类UncaghtExceptionHandler:处理崩溃问题
public class CrashHandler implements UncaughtExceptionHandler {
private static final String TAG = CrashHandler.class.getSimpleName();
private static CrashHandler instance; // 单例模式
private Context context; // 程序Context对象
private Thread.UncaughtExceptionHandler defalutHandler; // 系统默认的UncaughtException处理类
private CrashHandler() {
}
/**
* 获取CrashHandler实例
*
* @return CrashHandler
*/
public static CrashHandler getInstance() {
if (instance == null) {
synchronized (CrashHandler.class) {
if (instance == null) {
instance = new CrashHandler();
}
}
}
return instance;
}
/**
* 异常处理初始化
*
* @param context
*/
public void init(Context context) {
this.context = context;
// 获取系统默认的UncaughtException处理器
defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置该CrashHandler为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
}
/**
* 当UncaughtException发生时会转入该函数来处理
*/
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// 自定义错误处理
boolean res = handleException(ex);
if (!res && defalutHandler != null) {
// 如果用户没有处理则让系统默认的异常处理器来处理
defalutHandler.uncaughtException(thread, ex);
} else {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Log.e(TAG, "error : ", e);
}
// 退出程序
// android.os.Process.killProcess(android.os.Process.myPid());
// System.exit(1);
}
}
/**
* 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
*
* @param ex
* @return true:如果处理了该异常信息;否则返回false.
*/
private boolean handleException(final Throwable ex) {
if (ex == null) {
return false;
}
new Thread() {
@Override
public void run() {
Looper.prepare();
ex.printStackTrace();
System.out.println("日志输出:" + ex.getMessage());
Looper.loop();
}
}.start();
/**
* 可收集错误日志信息到服务器
*/
return true;
}
}
八、位运算计算:
StringBuffer sb = new StringBuffer()
private String printInt(int i) {
if (i / 2 != 0 || i % 2 != 0) {
sb.append(i % 2);
i = i / 2;
printInt(i);
}
return sb.toString();
}
//并将结果倒叙排列