Android严格模式(StrictMode)
16lz
2021-01-26
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中关于sdcard的操作
- Android(安卓)SurfaceTexture解读
- android RefBase
- Android——使用网络技术之使用OkHttp
- JSONObject与JSONArray的使用 jsonobject里面包含jsonarray
- SharedPreferences保存对象
- Android(安卓)Service用法讲解与实例
- Android之LayoutInflater
- Android中使用PULL方式解析XML和XmlSerializer进行序列化