- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的 sql 处理程序有问题
A SQLiteConnection object for database '/data/data/.../databases/queueManager' was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
取自 Androidhive 教程并根据我的使用进行定制
table 看起来像
+ ----------------------------------------------------------- +
: DATABASE_ID : DATABASE_QID : DATABASE_QUEUE : DATABASE_DATE :
+ ----------------------------------------------------------- +
代码
DBQueue searchDBqid(int id) {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_QUEUE + " WHERE " + DATABASE_QID + " = " + id;
Cursor cursornum = db.rawQuery(selectQuery, null);
int dk = cursornum.getCount();
cursornum.close();
if (dk >0) {
Cursor cursor = db.query(TABLE_QUEUE, new String[] { DATABASE_ID,
DATABASE_QID, DATABASE_QUEUE, DATABASE_DATE }, DATABASE_QID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null) cursor.moveToFirst();
DBQueue dbqueue = new DBQueue(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3));
return dbqueue;
}
db.close();
return null;
}
DBQueue getDBQueue(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_QUEUE, new String[] { DATABASE_ID,
DATABASE_QID, DATABASE_QUEUE }, DATABASE_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
DBQueue dbqueue = new DBQueue(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3));
return dbqueue;
}
public String getAllqid() {
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
String selectQuery = "SELECT * FROM " + TABLE_QUEUE + " WHERE " + DATABASE_DATE + " = '" + today.format("%d %m %Y") + "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
StringBuilder sb = new StringBuilder();
if (cursor.moveToFirst()) {
do {
if (sb.length() > 0) sb.append(',');
sb.append(cursor.getString(1));
} while (cursor.moveToNext());
}
String result = sb.toString();
return result;
}
public void deleteDatedDBQueue() {
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
String selectQuery = "SELECT * FROM " + TABLE_QUEUE + " WHERE " + DATABASE_DATE + " != '" + today.format("%d %m %Y") + "'"; ;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
db.delete(TABLE_QUEUE, DATABASE_ID + " = ?",
new String[] { String.valueOf(Integer.parseInt(cursor.getString(0))) });
} while (cursor.moveToNext());
}
db.close();
}
public int getDBQueueCount() {
String countQuery = "SELECT * FROM " + TABLE_QUEUE;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
}
谁能告诉我如何解决这个漏洞?
最佳答案
每个 Cursor
都应该在你完成后关闭。传统的做法是:
Cursor cursor = db.query(...);
try {
// read data from the cursor in here
} finally {
cursor.close();
}
但是现在,try-with-resources ,它可以更简洁:
try (Cursor cursor = db.query(...)) {
// read data from the cursor in here
}
关于Android SQLite 泄露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801602/
大家晚上好! 在当前的项目中,我遇到了相当令人担忧的内存泄漏,但我似乎无法修复它。 我让应用程序在标准使用情况下运行过夜,当我在 8 小时后醒来时,它消耗了约 750MB 内存,而它一开始的内存约为
class MyViewController: UIViewController { @IBOutlet weak var webView: UIWebView? override
我的 sql 处理程序有问题 A SQLiteConnection object for database '/data/data/.../databases/queueManager' was le
我在引用 block 本身内的“NSBlockOperation”时遇到麻烦。我需要检查操作是否被取消,并且似乎在启用 ARC 的项目中运行时,对“searchOperation”的任何访问都会泄漏。
public class ProgressCircleActivity extends AppCompatActivity { private ProgressDialog progressB
Activity 泄漏是我可以为当前问题想到的最具体的术语。如果有其他情况,请指正。 场景:我创建了一个简单的 Android 测试应用程序来解决我的问题。我有一个 Activity ,一个添加到 f
我正在尝试创建身份验证系统,如果设备关闭 (SCREEN_OFF) 超过 INTERVAL,该系统会弹出登录窗口。 我已经注册了一个 BroadcastReceiver 来监听可启动 Activity
我想知道如果生产 key 被泄露需要采取哪些步骤。幸运的是,情况并非如此,但还是很高兴知道。 特别是,如果简单地将旧 key 交换为新生成的 key ,会发生什么情况?由于它用于生成哈希,是否会破坏整
我正在使用 Leak Canary 来跟踪内存泄漏,它说以下内容被泄漏: static hk.o references ht.a leaks MainActivity instance hk.o 和
-(NSDate *)dateFromDate:(NSDate *)inDate withNewTime:(NSDateComponents *)inTimeComponents { NSCalend
当我使用 AudioToolBox 播放音乐时,内存泄漏严重。 AVAudioPlayer *newMusicPlayer = [[AVAudioPlayer alloc] initWithData:
我使用 OpenAL 在我的应用程序中播放声音。当我使用 Instruments 工具测试它时,它发现了泄漏: LeakedObject = GeneralBlock-512 大小 = 512 字节
我需要捕获桌面图像并处理其 RGB 数据,我正在使用 Quartz API 来执行相同的操作, 我面临的问题是内存使用率高, 请引用函数, 在这里编辑,该函数是通过 pThread 调用的;像这样的东
我的 Android 应用程序中有一个 MapActivity,它使用 osmdroid(Open Street Map for Android 库)显示 map 。 当我在此 MapActivity
我在 fragment 中使用 AdMob。有时我会看到以下堆栈 10-23 14:27:38.916: E/ActivityThread(21250): Activity com.applegrew
我正在使用以下方式访问我的 API key ;这似乎是 recommended way ;但是当我将我的应用程序上传到 Play 管理中心时,运行预发布报告时出现严重错误。它说“泄漏的 GCP API
一家 3rd 方安全咨询公司在我们的 Angular SPA/ASP.NET WebAPI 应用程序中发现了 区域下的风险。信息公开 ,我们被告知要解决。 风险是由于 Angular 应用程序的性质,
在 Android 中,当读取 MIFARE Classic 卡时,使用 MifareClassic.authenticateSectorWithKeyA(或 authenticateSectorWi
加载谷歌地图时在分析器中获取泄漏。我根据谷歌的示例代码创建了一个非常简单的 View Controller ,我发现我在加载 map 时遇到了泄漏。我相信泄漏是在 SDK 本身。有没有人遇到过这个问题
我是一名优秀的程序员,十分优秀!