StrictMode VMPolicy demo介绍

1. 背景介绍:在系统稳定性monkey测试和案例测试中,我们在dropbox发现了大量的关于strictmode严苛模式的报错,为了增强系统稳定性,我们打算在项目初期就把这些类型的报错提给开发,来解决。对此本文写了StrictMode(VmPolicy)类型的demo以供大家粗粗略了解StrictMode。2. StrictMode 详解:StrictMode 通过策略方式来让你
摘要由CSDN通过智能技术生成

#1. 背景介绍:
在系统monkey测试和案例测试中,我们在dropbox发现了大量的关于strictmode严苛模式的报错,为了增强系统稳定性,我们打算在项目初期就把这些类型的报错提给开发,来解决。对此本文写了StrictMode(VmPolicy)类型的demo以供大家粗粗略了解StrictMode。

#2. StrictMode 详解:
StrictMode 通过策略方式来让你自定义需要检查哪方面的问题。 主要有两中策略,一个时线程方策略- (ThreadPolicy),一个是VM方面的策略(VmPolicy)。
ThreadPolicy 主要用于发现在UI线程中是否有读写磁盘的操作,是否有网络操作,以及检查UI线程中调用的自定义代码是否执行得比较慢。
VmPolicy,主要用于发现内存问题,比如 Activity内存泄露, SQL 对象内存泄露, 资源未释放,能够限定某个类的最大对象数。

3. StrictMode(VmPolicy)默认检查的错误类型主要有以下五种可以自由组合:

.detectAll()
.detectActivityLeaks()
.detectFileUriExposure()
.detectLeakedClosableObjects()
.detectLeakedRegistrationObjects()
.detectLeakedSqlLiteObjects()

4.StrictMode(VmPolicy)Penalty 违规后的惩罚方式有以下三种可以自由组合:

.penaltyDropBox()
.penaltyDeath()
.penaltyLog()

5. 现写了上述检查的五种错误类型的demo,界面如下:

这里写图片描述

6. 下面介绍主要的代码:


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.os.SystemClock;
import android.provider.Contacts;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

@SuppressLint("HandlerLeak")
@SuppressWarnings("deprecation")
public class StrictModeDemo extends Activity implements View.OnClickListener {
   
	private static final String TAG = "StrictModeActivity";
	private static final boolean DEBUG_MODE = true;
	private static final int MSG_GET_DATA_OK = 100;
	
	private Context mContext;
	private TextView mTextView;
    private Button mCursorLeakButton;
    private Button mClosableLeakButton;
    private Button mActivityLeakButton;
    private Button mRegistrationsLeakButton;
    private Button mClassInstanceLimitButton;
	
	private Thread mThread = null;
	private TestStrictModeBroadcast mReceiver = null;
	private List<ClassCounts> mClassList = new ArrayList<StrictModeDemo.ClassCounts>();
	
	private static class ClassCounts{
   
		/**No Content, Only used test!*/
	}
	
	private Handler mHandler = new Handler() {
   
		@Override
		public void handleMessage(Message msg) {
   
			switch (msg.what) {
   
				case MSG_GET_DATA_OK:
					String result = (String) msg.obj;
					if (TextUtils.isEmpty(result)) {
   
						result = "抱歉,手机没有联系人!";
					}
					mTextView.setText(result);
				break;
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
   
		super.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值