我阅读了很多帖子,告诉他们不应该在主线程上执行长时间的操作(比如阅读DB)。
到目前为止,我使用了CursorLoader
(用于“阅读”ContentResolver
)和AsynkTaskLoader
(用于“阅读”我自己的SQLite数据库)。
我知道要在Insert
Delete
上执行Update
,ContentResolver
和AsyncQueryHandler
“。
我的问题是:在我自己的SQLite数据库上执行Insert
,Delete
和Update
的最佳方法是什么?
我应该只在loadInBackground()
的方法AsyncTaskLoader
内执行这些操作吗?
谢谢
答案 0 :(得分:1)
如果您的查询简单并且没有太多时间执行,那么您只需在主线程中使用它。
如果您正在进行大数据处理,那么您有两种选择。
如果要在操作后更新UI,可以使用 AsyncTask 在后台线程中执行该过程,并将结果传递给主线程。有关 AsyncTaksk 的详情,请点击here。
2 <强>发强>
如果在操作后没有更新UI的目的,您只需使用线程即可。
答案 1 :(得分:1)
您可以使用后台处理程序线程。
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);