我正在详细了解Android中的内容提供商,而且他们的表现也是如此。例如,如果我为SQLite操作编写自己的内容提供程序(子类ContentProvider),然后我想在Activity的onPause()方法中执行操作,那么在我的Activity中我会这样做:
@Override
protected void onPause (){
super.onPause();
// ...prepare myTransactionValues
// This could be anything like insert, bulkInsert, query, delete, etc.
getContentResolver().insert(CONTENT_URI, myTransactionValues)
}
但是,看起来这个数据库操作正在主线程上完成。工作是在幕后的一个单独的线程中完成的吗?它应该在它自己的线程中吗?如果应该,是否有推荐的方式(也许是服务)?
答案 0 :(得分:3)
如果您想在非UI线程中执行某些操作,通常应使用AsyncTask。另一方面,service
最适合长期任务。
答案 1 :(得分:0)
使用内容提供商的最佳方式是AsyncTask
,因为它们是昂贵的操作,无法在主线程中运行。
Android已经将这种模式封装在他们称之为扩展AsyncTaskLoader
的加载器中,以便在非UI线程中使用加载器回调和Cursors来从内容提供者检索数据。