关于附带数据库操作时Activity界面总是自动启动

本文探讨了在Android应用中遇到的SQLite数据库对象泄露问题,通过使用单例模式来确保数据库对象的唯一性,避免了资源浪费并防止程序崩溃。文中提供了具体的代码示例和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我在登陆后本来登录界面是应该finish的,结果每次登陆后退出主界面后总是会再次返回到登录界面。看Logcat里边有这个警告:

A SQLiteConnection object for database '/data/data/com.example.oldtest/databases/user.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.

明显是数据库操作异常,数据库对象被锁,明确告诉你对象长久不用需要关闭。

 

改正:获取数据库对象改成单例模式,项目运行中只保证唯一一个对象即可。如下:

private static XXXXSQLHelper mInstance = null;

public synchronized static XXXXSQLHelper getInstance(Context context) { 
if (mInstance == null) { 
mInstance = new XXXXSQLHelper(context); 

return mInstance; 
};

 

调用如下:

public XXXXDBUtil(Context context) {
mSQLiteDatabase = XXXXSQLHelper.getInstance(context)
.getWritableDatabase();
}

 

注意:此时数据库对象是唯一实例了,不需要close了,如果close掉,将会出现对象已关闭的严重异常,导致程序崩溃。

 

参考网站:http://www.wahenzan.com/a/mdev/android/2015/0105/1413.html

http://stackoverflow.com/questions/21496221/sqlite-connection-object-leaked-android

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值