总结android日常用到的注意点

一、 网络访问:
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();
    }

//并将结果倒叙排列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值