当前位置: 移动技术网 > IT编程>移动开发>Android > 深入Android Browser配置管理的详解

深入Android Browser配置管理的详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

最新上映的好看电影,易丝瑞尔,米惠网官网

settings是webview提供给上层app的一个配置webview的接口,每个webview都有一个websettings,要控制webview的行为,只能通过webview.getsettings()获取websettings对象的引用,然后再改变它的属性。
browser有一个browsersettings用来管理所有的配置信息,它是一个单键(singleton)。browsersettings是直接管理websettings的,而ui部分则是由browserpreferencepage和fragment来完成。browsersettings实现了onsharedpreferencechangedlistener,当某个配置项发生变化时,browsersettings的接口onpreferenceschanged就会被回调到,然后browsersettings就会把配置通过websettings应用到webview中,所以这些settings都是及时生效的。

一共有三类settings:共享settings,静态settings和动态settings。静态就是不会在browser运行时发生变化的,也就是说在browser的settings中无法改变的一些配置,这些跟应用程序内部关联较多,比如应用程序的数据存放地点等,而与用户层关系不多;共享settings是独立于webview的,也就是说它被系统内所有webview共享的一些配置,比如cookie,它不需要为每个webview单独配置。动态settings就是用于动态配置webview的,比如字体,缩放,是否加载图片,是否启用javascript等等。

初始化
因为browser可以有多个窗口,每一个窗口都会有一个webview,也就是说browser会管理多个webview,所以browsersettings也要管理多个websettings,因为每一个配置的改变都要应用到所有的webview中。为了能让browsersettings能够管理多个websettings,它必须持有对这些websettings的引用。browser在创建webview的时候会把webview的配置websettings通过接口放到browsersettings中,browsersettings中有一个列表,用于持有对websettings的引用。具体的browserwebviewfactory中的initwebviewsettings()方法会在每次创建webview后调用,它把webview的websettings取出,做些必要的初始化,然后放到browsersettings中,browsersettings.startmanagingsettings()会加载sharedpreference文件中的信息对此websettings进行初始化,然后放到mmanagedsettings列表中。

配置变更
用户进入settings界面,进行配置的更改,每当有配置发生变化browsersettings.onsharedpreferenceschanged()会被回调到,它就会做syncmanagedsettings()的动作,把共享设置同步到底层去(也即把设置同步到cookiemanager中),再遍历列表mmanagedsettings,把mpref中的信息全部同步到每个websettings中,这样所有的webview都会实时的响应配置变更。

设置的界面和browsersettings没有直接的关联,界面是通过preferenceactivity和fragment把各种settings呈现给用户,而browsersettings是把配置信息同步给webview也就是让配置生效。它们之间的信息桥梁是sharedpreference,也就是说preferenceactivity和fragment从用户处接收配置信息,然后放到sharedpreference中,browsersettings监听sharedpreference的变化,再把sharedpreference同步给webview。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网