Android 9.0Settings搜索功能分析
Android 9.0 的 Settings 搜索功能,算是系统里一个蛮核心的体验点了。你点开设置,搜索个 Wi-Fi 啊、蓝牙啊,其实背后流程挺复杂,但设计得还挺清晰。源码主要在SettingsIntelligence
里头,里面拆分得细,每个类负责自己的活,改起来也比较灵活。
搜索是从SearchActivity
跳到SearchFragment
开始的,前端展示用RecyclerView
,背后数据是用SearchFeatureProviderImpl
调的,还用了LoaderManager
做异步加载,响应也快,不会卡。你要是改 UI 交互,改SearchFragment
那块就行。
数据是咋来的呢?初始化的时候会跑一堆SearchQueryTask
,每个任务负责一个数据源,像DatabaseResultTask
就是查本地数据库的,InstalledAppResultTask
能把 App 也加进来。关键是这些任务都是从FutureTask
继承的,线程安全也做得到位。
数据库的内容怎么填?这块用的是updateIndexAsync
异步跑的,调用了queryIntentContentProviders
,从系统里挨个 ContentProvider 拉数据,都塞进自家的 SQLite 里。蛮有意思的是SettingsSearchIndexablesProvider
,就是个专门负责喂搜索用数据的 Provider,你可以自己搞一个,实现接口就行。
想改内容来源,比如让某个 App 里的设置项也能搜到?那就得自定义SearchQueryTask
,再配合SearchResultLoader
返回新数据。还可以改SettingsSearchIndexablesProvider
或者新增一个自己的 Provider,你想加的数据。整体来说,结构还是挺清楚的,改哪块,看你想实现啥功能。
如果你也在搞 Android 系统定制,是要改设置搜索那块,这份文档真心推荐看看,源码路径、逻辑链路、可扩展点全都说得挺清楚。不看源码都能理出七八分逻辑,动手也有底气。
评论区