我已经阅读了Head First Android Development中的Cursors和AsyncTasks章节,我仍然不确定何时使用AsyncTask以及何时不执行数据库操作。
假设我正处于一个活动中,当它结束时,写入sqlite数据库并将用户发送回主活动(使用finish()
),该活动显示从数据库中提取的数据列表。
显然,数据列表必须立即更新,就像用户输入MainActivity一样。这是否意味着我不应该在这种情况下使用AsyncTask?我还有其他选择吗?在MainActivity已经可见之后,我不想让用户看到更改的数据列表。
更简单的场景:用户单击应在TextView中显示数据库信息的按钮。这应该在一个单独的线程中完成吗?我不确定,因为TextView必须立即更新。
答案 0 :(得分:1)
阅读和阅读的最佳实践在数据库中写入数据是:在单独的线程中执行。因为它可能需要很长时间,如果数据量相当大或查询本身太复杂,在主线程中执行它会导致ANR。
如果要立即显示数据更改,可以按照以下步骤进行操作:
至于你的上一个例子,你可以在AsyncTask类的onPostExecute方法中立即更新textview的内容
如果您没有使用AsyncTask,您可以通过以下方式之一在其他线程中更新ui:
答案 1 :(得分:0)
通常,您应该在单独的线程上执行数据库查询,但如果您确定数据库相对较小(轻量级),则可以在主线程上执行它。但最好的做法是在不同的线程上执行潜在的长期运行任务。