用StrictMode来检测SQLite的泄漏leaked优秀排错方法
Chapter: Android与SQLite数据库
- SQLite 数据库的初步认识
- SQLite 数据库的一些基本操作
- SQLite 在 Android 开发中的简单应用演示
- Android SQLite 增删改查操作的补充说明
- 单独谈谈 Android Cursor 的使用细节
- getWritableDatabase()/getReadableDatabase()区别
- 用StrictMode来检测SQLite的泄漏leaked
当一个应用变得复杂,SQLite使用得频繁,就容易出现数据库泄漏 leaked:
A SQLiteConnection object for database ‘nowamagic.db’ was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
当代码过多,怎么排查呢?
一个方法是,使用android.os.StrictMode。
从 GINGERBREAD 开始 Android 就提供了 StrictMode 工具协助开发人员检查是否不小心地做了一些不该有的操作。使用方法是在 Activity 里面设置 StrictMode,下面的例子是打开了检查泄漏的 SQLite 对象以及 Closeable 对象(普通 Cursor/FileInputStream 等)的功能,发现有违规情况则记录 log 并使程序强行退出。
import android.os.StrictMode;
public class MainActivity extends Activity {
private static final boolean DEVELOPER_MODE = true;
public void onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
super.onCreate();
}
}