有人能解释一下runQueryOnBackgroundThread吗?

4

有人能简单解释一下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);
}
1个回答

3
在适配器中,我的Activity的句柄和filter中的runQuery调用会在每次运行runQuery时调用Activity上的startManagingCursor。这不是理想的,因为后台线程正在调用startManagingCursor,直到Activity被销毁之前可能会有很多游标保持打开状态。
我在适配器中添加了以下内容,它具有对其所使用的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); 
} 

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接