2024年5月7日发(作者:)

QuickSearchBox功能简析

一、 概述

全局搜索(QuickSearchBox)是Android系统中原生的应用程序,它的主要职能是

接收用户的搜索请求,并将搜索请求传达给支持全局搜索的应用程序,应用程序执行搜索

操作,并将搜索到的结果返回给全局搜索应用程序,全局搜索应用根据搜索结果渲染UI

界面,当用户单击某一个搜索出来的结果项就会打开相应的应用程序,显示搜索结果的详

细信息。

二、 技术架构:

Android系统的全局搜索由搜索管理器(SearchManager),全局搜索AppWidget,

全局搜索应用,支持全局搜索的应用程序(联系人,音乐,浏览器等)四大部分组成:

(1)framework层的搜索管理器(SearchManager):主要功能是对Android系统

全局搜索提供支持,当Android系统启动完成后会发出系统启动完成

(BOOT_COMPLETED)广播,SearchManager接收到此广播后会通过

PackageManager搜索系统中支持全局搜索的应用程序(应用程序如何支持全局搜索以后

的文章会介绍),这此支持全局搜索的应用我们称为搜索源,SearchManager解析搜索源

的配置信息并将这些配置信息封装成对象保存在List列表中供全局搜索应用程序使用。

(2)全局搜索AppWidget:AppWidget是搜索的入口,当用户需要使用全局搜索

时会单击已经添加到桌面的全局搜索AppWidget,这时会打开全局搜索应用。

(3)全局搜索应用程序(QuickSearchBox):它的主要职能是接受用户的输入请求,

启动异步搜索,将搜索到的结果显示。

(4)支持全局搜索的应用程序:每一个支持全局搜索的应用程序都需要实现一个

ContentProvider,通过这个ContentProvider向外提供数据,全局搜索应用

(QuickSearchBox)会调用这些ContentProvider获取数据。

三、 搜索源建立

系统启动后,在system_process进程中,会启动SearchManagerService服务

(),在初始化函数中针对

_BOOT_COMPLETED注册了一个BroadcastReceiver,其run()函数中调

用getSearchables()函数建立手机可搜索资源,Searchables的类函数

buildSearchableList为真正建立搜索列表资源函数。

文件buildSearchableList()函数,这里跟踪searchList的创建。

final Intent intent = new Intent(_SEARCH);

searchList = ntentActivities(intent,

_META_DATA);

queryIntentActivities的实现函数见文件,

esolveInfo info = (ii < search_count) ? (ii)