从浏览器Apk的AndroidManifest.xml文件看到,Apk的Application 类和主Activity类分别是 Browser和BrowserActivity。
Browser Application类在onCreate方法中进行了以下工作:
1. 同步Cookie
2. 初始化设置
3. 初始化Preloader
BrowserActivity 是Apk的主Activity,我们在Launcher上点击浏览器图标启动的就是这个Activity。
查看BrowserActivity的代码,可以看到它在onCreate方法中创建了Controller成员,然后后续的主要方法都Delegate给了Controller成员进行处理,它自己基本上就是系统功能与Android Activity Life Cycle管理之间的一个Adapter。
在Controller创建的同时创建了一个Ui对象,看到Apk目前可以支持Tablet(XLargeUi)和手机(PhoneUi)。
从Controller和Ui大概可以判断这是一个类似MVC的设计(没有M,why?)。
可以期望,系统的基本控制逻辑是在Controller类实现,而Ui则负责Ui的部分。
Controller类基本分析:
Controller类实现了三个接口:ActivityController,WebViewController,UiController。
ActivityController:我们已经在BrowserActivity里看到,这个接口用于与Android Activity Life Cycle Management(LCM)进行适配, BrowserActivity只使用该接口访问Controller,它保持的引用就是一个ActivityController接口:ActivityController mController。 设计模式的基本原则:program to an interface, not an implementation。
WebViewController:从该接口的方法看到,这个接口除了与WebView交互比较多,还与Tab类交互密切。根据经验,浏览器一般为每个网页提供一个单独的Tab,估计这个就是管理该Tab的类。接口的方法与WebViewClient里的方法很类似,可以期望给接口主要实现WebViewClient相关的Customization Point.搜索该接口的使用情况,看到主要是Tab类使用它。Tab类是与WebView进行交互的主要类,看来需要重点研究。
UiController:与Ui部分控制相关的接口,openTab,closeTab,setActiveTab,书签,设置等等。正像期望的那样,Ui类只保持Controller的这个接口:UiController mUiController;
Ui类基本分析:Ui类层次结构稍微丰富一点点,包括UI接口,BaseUi抽象类和两个具体类PhoneUi&XLargeUi。Ui的方法主要是跟Tab,Menu等Ui对象相关的方法,这里不具体研究。同样,Controller与Ui的交互也是通过接口:private UI mUi;
对Apk结构的分析暂时到此,后面我们从系统典型场景入手,分析系统典型功能的具体实现。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。