是否应在服务中完成对内容解析器的调用(即单独的线程)?

时间:2011-12-05 21:19:01

标签: android android-contentprovider

我正在详细了解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)
}

但是,看起来这个数据库操作正在主线程上完成。工作是在幕后的一个单独的线程中完成的吗?它应该在它自己的线程中吗?如果应该,是否有推荐的方式(也许是服务)?

2 个答案:

答案 0 :(得分:3)

如果您想在非UI线程中执行某些操作,通常应使用AsyncTask。另一方面,service最适合长期任务。

答案 1 :(得分:0)

使用内容提供商的最佳方式是AsyncTask,因为它们是昂贵的操作,无法在主线程中运行。 Android已经将这种模式封装在他们称之为扩展AsyncTaskLoader的加载器中,以便在非UI线程中使用加载器回调和Cursors来从内容提供者检索数据。