有人可以向我解释runQueryOnBackgroundThread吗?

问题描述:

有人可以向我解释什么是runQueryOnBackgroundThread,因为我已经阅读了一些资源,但仍然不理解它?有人可以向我解释runQueryOnBackgroundThread吗?

@Override 
public Cursor runQueryOnBackgroundThread(CharSequence constraint){ 
    FilterQueryProvider filter = getFilterQueryProvider(); 
    if (filter != null){ 
     return filter.runQuery(constraint); 
    } 

    Uri uri = Uri.withAppendedPath(
       ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(constraint.toString())); 

    return content.query(uri, CONTACT_PROJECTION, null, null, null); 
} 

我在适配器中的活动句柄和过滤器中的runQuery调用会在调用runQuery时在Activity上调用startManagingCursor。这并不理想,因为后台线程正在调用startManagingCursor,并且可能还有很多游标保持打开状态,直到Activity被销毁。

添加以下到我的适配器,其对活动手柄是内

@Override 
public void changeCursor(Cursor newCursor) { 
Cursor oldCursor = getCursor(); 
super.changeCursor(newCursor); 
if(oldCursor != null && oldCursor != newCursor) { 
    // adapter has already dealt with closing the cursor 
    activity.stopManagingCursor(oldCursor); 
} 
activity.startManagingCursor(newCursor); 
} 

这可以确保适配器使用当前光标也由活动管理使用。当适配器管理通过活动关闭游标时将被删除。适配器持有的最后一个光标将被活动关闭,但仍由活动管理。