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)
发布评论