Android严格模式(StrictMode)

StrictMode作用:

是用来检测程序中违例情况的开发者工具。
小白主要用于监测内存泄漏

检查策略

两种:线程策略【ThreadPolicy】虚拟策略【VmPolicy】
代码如下:

代码位置

严格模式的开启可以放在Application或者Activity以及其他组件的onCreate方法

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                        .detectCustomSlowCalls() //API等级11,使用StrictMode.noteSlowCode 自定义的耗时调用
                        .detectDiskReads() //磁盘读取操作
                        .detectDiskWrites() //磁盘写入操作
                        .detectNetwork()  //网络操作
                        //  .penaltyDialog() //弹出违规提示对话框
                        .detectAll()
                        .penaltyLog() //在Logcat 中打印违规异常信息
                        .build());

                StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                        .detectAll()
                        .detectActivityLeaks()  //Activity泄露
                        .detectLeakedSqlLiteObjects()  //泄露的Sqlite对象
                        .setClassInstanceLimit(this.getClass(), 1) //检测实例数量
                        .penaltyLog()
                        .build());

解决问题记录:
1:实例对象重复问题
2:UI线程有耗时操作检测
3 在base中使用Toast一定要使用getApplication

    //错误写法
    @Override
    public void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
    //正确写法
    @Override
    public void showToast(@StringRes int resId) {
        Toast.makeText(getApplicationContext(), resId, Toast.LENGTH_SHORT).show();
    }

4:读取SharedPreferences中文件,也要使用全局applicationContext为参数
5:异步操作一定要使用弱引用,防止内存泄漏
6 application注意只能实例一次,即系统系统就会自动创建,最好不要在new
7 在读取系统服务(Service)创建一次就行。
8 List对象和handler对象在当前活动activity最好结束时最好销毁。

你可能感兴趣的:(Android)