【发布时间】:2018-02-14 02:23:46
【问题描述】:
我在从 SQLite 获取数据时遇到问题2048 kb 的光标窗口分配失败使用 Thread 后台服务
但是如果我在没有 Thread 后台服务的情况下运行 List branchList= DBTransaction.BranchList();,这个函数是正常工作的
MyService.Java
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Service onStartCommand");
new Thread(new Runnable() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void run() {
while(true)
{
List<Branch> branchList= DBTransaction.BranchList();
if (branchList.size() < 0)
getBranch(); //get branch using volley get data from web service
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
return START_STICKY;
}
SQLite 获取数据
public List<Branch> BranchList(){
List<Branch> branchList = new ArrayList<Branch>();
String selectQuery = "SELECT * FROM " + TABLE_BRANCH;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = null;
try {
cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()){
do{
Branch branch = new Branch();
branch.setID(cursor.getString(0));
branch.setName(cursor.getString(1));
branch.setCode(cursor.getString(2));
branchList.add(branch);
}while (cursor.moveToNext());
}
}finally {
if(cursor != null)
cursor.close();
}
return branchList;
}
来自安卓监视器的错误结果
E/Volley: [10497] NetworkDispatcher.run: Unhandled exception android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=8 (# cursors opened by this proc=8)
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=8 (# cursors opened by this proc=8)
【问题讨论】:
-
我尝试了link 的解决方案,我得到了这段代码'finally { if(cursor != null) cursor.close(); }' 但问题没有解决
标签: android sqlite mobile memory-leaks cursor