StrictMode:
帮助程序员避免在主线程上执行耗时操作;
启动级别:
1. 启动线程级别: setThreadPolicy()
2. 启动应用级别 : setVmPolicy() —— 对于检测应用内部的资源泄漏很有用
可检测线程的如下操作:
1. 磁盘的读和写操作;
2. 访问网络;
3. 运行速度较慢的代码;
可检测整个应用的如下操作:
1. 有界面(Activities)对象泄漏;
2. 有SQLite对象泄漏;
3. 有任何需要显示关闭的对象泄漏,即实现了Closeable接口的对象,在finalizer被调用前,没有调用close函数;
应用违反了这些规则,将受到以下惩罚:
1. 在logcat中打印详细的消息通知;
2. 直接让应用崩溃退出;
3. 不停的闪烁屏幕吸引注意;
4. 在应用上弹出一个对话框提醒开发者;
举例:
在主线程中执行下面的操作是不允许的:
1. 使用new Socket()视图打开一个套接字链接;
2. 使用HttpClient和HttpUrlConnection发送一个Http请求;
3. 尝试连接一个远程的MySQL数据库;
4. 使用Downloader.downloadFile下载一个文件。
Anroid提供了几种方法让其他线程操作UI控件:
1. Activity.runOnUiThread(Runnable);
2. View.post(Runnable); ===> AsyncTask
3. Handler