首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内存中的Android sqlite游标

内存中的Android sqlite游标
EN

Stack Overflow用户
提问于 2016-11-12 00:08:14
回答 1查看 815关注 0票数 0

我正在尝试调试我正在经历的“内存不足”错误,因此为了压缩我的示例以寻求帮助,我有一个按钮,当单击它时,它查询db并将所有值返回到ArrayList中,然后使用ArrayList填充一个RecyclerView。这是成功的,但是如果我第二次按下按钮,就会出现“内存不足”错误。查询返回大量数据,从日志中我可以看到,只要按一下按钮,内存就不多了(运行在模拟器上)。我从日志中的这一行得出了这样的结论:

com.wizzkidd.myapp D/dalvikvm: GC_FOR_ALLOC freed 1459K, 2% free 91444K/93016K, paused 40ms, total 40ms

正如前面所解释的,第二次按下按钮会产生以下错误:

com.wizzkidd.myapp E/dalvikvm-heap: Out of memory on a 152-byte allocation.

错误指向我的数据库助手类,更具体地说,这部分代码:

代码语言:javascript
复制
public List<MyInfo> getAllFromDb() {
    List<MyInfo> myArrayList= new ArrayList<MyInfo>();   
    String selectQuery = "SELECT * FROM myTable";
    SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
    Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null);
    try {
        if (cursor.moveToFirst()) {
            do {
                MyInfo myInfo = new MyInfo();                                      
                myInfo.setTitle(cursor.getString(0));
                myInfo.setDescription(cursor.getString(1));
                myArrayList.add(myInfo);
            } while (cursor.moveToNext());
        }
    } catch (Exception e) {
        Log.d(TAG, "Error while trying to get data from database");
    } finally {
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
    }
    return tvGuideInfoList;
}

我在这里研究了前面的文章,大多数答案都说光标必须关闭在“最后”块中。但正如你在上面看到的,我已经在这么做了。

EN

Stack Overflow用户

回答已采纳

发布于 2016-11-13 00:50:47

@antlersoft为我指明了正确的方向,因为我需要清除/清空适配器中用于填充RecyclerView的数据。

我想出了一个快速的方法,它允许我为MyViewAdapter创建一个空白的MyViewAdapter,然后将它用于RecyclerView。我相信,通过在适配器中填充一个空白的ArrayList,它迫使垃圾收集清除了以前的数据,从而使我能够有一个新的内存池来准备下一个填充。

代码语言:javascript
复制
private void clearRecyclerView() {
        myViewAdapter = new MyViewAdapter(activity, new ArrayList());
        myRecyclerView.setAdapter(myViewAdapter);
        myViewAdapter.notifyDataSetChanged();
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40558130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档