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最好结束时最好销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值