我应该执行插入,删除,更新我自己的SQLite数据库内AsyncTaskLoader
我读了很多帖子告诉长操作(如阅读数据库)不应该在主线程上执行。我应该执行插入,删除,更新我自己的SQLite数据库内AsyncTaskLoader
到目前为止,我使用了CursorLoader
(用于“阅读”ContentResolver
)和AsynkTaskLoader
(用于“阅读”我自己的SQLite DB)。
我知道 “的” ContentResolver
执行Insert
,Delete
和Update
我可以使用AsyncQueryHandler
。
我的问题是:在我自己的SQLite数据库上执行Insert
,Delete
和Update
的最佳方法是什么?
我是否应该在AsyncTaskLoader
的方法loadInBackground()
内执行这些操作?
谢谢
如果你的查询都是简单,它不会让太多的时间来执行,然后简单地就可以在主线程本身使用它。
如果你正在做大数据处理,那么你有两种选择。
- 的AsyncTask:
如果你想要的操作后,更新你的用户界面,您可以使用的AsyncTask做的过程在后台线程,并将结果传递到主线程。欲了解更多关于AsyncTaksk请点击here。
2. 主题
如果没有术后更新UI,你可以简单地使用主题这样做的目的。
谢谢你的男人。评估的内容是针对移动设备的“大数据流程”? 保存/删除/更新100条记录? 1.000? 1000.000? – MDP
如果我需要查询超过20条记录,我将不会使用主线程。 –
我不知道确切的数字。但这不是关于数字,而是关于执行时间。 –
您可以使用后台处理程序线程为您的目的。
private Handler mHandler = null; // global variable
private HandlerThread mHandlerThread = null; // global variable
//创建实例内的onCreate()或你的代码中另一个地方,因此将被称为一个人的。如果需要,你也可以单身,但这不是正确的方法。
mHandlerThread = new HandlerThread("HandlerThread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
//执行后台操作,如:
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do background work here.
}
}, 2000);
谢谢你:) – MDP
使用'AsyncTask'和执行'doInBackground'方法的更新。但是,如果您的更新轻而快速,您可以在UI线程中*执行它们,让您的生活变得更轻松。 – Dusan
谢谢你:) – MDP
即使是慢速设备也能够每秒执行几百次简单的数据库操作,所以没有必要在后台执行一个或几个操作。 https://*.com/questions/28188164/android-sqlite-performance – Dusan