gpt4 book ai didi

android - 使用游标避免 ANR

转载 作者:行者123 更新时间:2023-11-30 04:38:47 24 4
gpt4 key购买 nike

我有一个在 Sqlite 数据库上运行查询、获取游标、使用该游标创建 CustomCursorAdapter 并将其附加到 Activity 中的 ListView 的 Activity 。它看起来像这样:

SQLiteDatabase db=new StuffHelper(this).getWritableDatabase();
Cursor c1=db.query(StuffHelper.TABLE,
new String[]{StuffHelper._ID},
StuffHelper.SIZE+">=?",
new String[]{"64"},
null,
null,
null);
startManagingCursor(c1);

StuffAdapter a1 = new StuffAdapter(this, c1);

ListView ll1 = (ListView) findViewById(R.id.ll1);
ll1.setAdapter(a1);

当前设置是否存在 ANR 问题?使用游标时,如何告诉 android 在后台线程上运行所有 Sqlite 内容?

最佳答案

你没有给出这段代码何时运行的太多上下文,但我还是要坚持下去......

是的,它确实有发生 ANR 的风险。它还存在各种其他生命周期问题的风险。由于 setListAdapter() 需要在您通常在 onCreate() 中执行的各种其他操作之前被调用,您可能希望将数据库访问卸载到一个单独的线程(例如一个 AsyncTask),可以根据需要调用/缓存/管理。 AsyncTask 在线程启动前为您提供基于 UI 的回调,在线程结束时为您提供基于 UI 的回调。 ListAdapter 可以在没有任何 Cursor 引用的情况下创建和分配(我建议你尽快修复它......你使用自定义列表适配器似乎没有充分的理由,你应该管理你的数据库访问更好)。

通过 Activity 拆卸和重建(想想改变方向......)来管理这个任务是一个完全不同的蜡球,并且已经在 SO 上令人作呕地被覆盖。

关于android - 使用游标避免 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6367307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com