Android 原生浏览器 (Browser Activity)分析(一)

来源:互联网 发布:傲梦少儿编程怎样 编辑:程序博客网 时间:2024/05/21 22:58

 最近在研究android的原生系统应用,毕竟这是千锤百炼的代码, 学习这些代码会更快。选取了audio播放器和web 浏览器作为分析

 选用android 4.0的代码 browser的代码,总代码行数多达4万多行。

但导入代码到adt 就遇到不少编译错误。

这需要要导入其它android系统库, 下载android 源代码并编译。

如链接所说的方法成功的编译通过并在虚拟机上运行

http://www.educity.cn/wenda/175064.html

有点失望的是browserActivity 没有http相关的协议生成, 最终这是在android的webkit部分处理, 最终不过用loadurl 函数调用framework层,最终调用webkit部分。


该浏览器分为几个部分

1. com.android.browser 浏览器的主体部分 其中BrowserActivity.java 是启动Browser的Activity.

2.com.android.browser.addbookmark 增加bookmark.  使用下拉菜单控件

3.com.android.browser.homepage  主页设置

4.com.android.browser.preference  收藏页,喜好相关

5.com.android.browser.provider 存储历史页面和标签页到sqlite 数据库 

6.com.android.browser.search 搜索引擎 指向google搜索引擎

7.com.android.browser.view 其他一些视图代码

Browser Activity 代码大量使用了设计模式, 像BrowserSetting使用了singleton, BrowserWebView 使用了Factory模式, Controller使用了state等


browser 主体中较为重要的代码是

Browser.java  继承自Appplication. 生成BrowserSetting的单例和Preloader的单例

BrowserActivity.java  是启动Browser的Activity. 1)判断是phone或者tablet,获得Ui handler 2)生成Controller对象 mController,并调用mController.start

Controller.java  控制部分,实现UiController和WebViewController.接口

   mController.start() -> dostart()->启动onPreloginFinished线程->openTab(urlData)->loadUrlDataIn->loadUrl

Tabcontroll.java   最主要是这几个数据 储存mTabs和currentTab
    private ArrayList<Tab> mTabs;  // Private array of WebViews that are used as tabs.
    private ArrayList<Tab> mTabQueue; // Queue of most recently viewed tabs.
    private int mCurrentTab = -1;     // Current position in mTabs.

  Tab.java  比较重要的是生成 WebViewClient,其中的回调函数会调用setWebView 并调用WebView类的WebView函数,转入framework层

    setWebView 应该是其中最重要的函数.

 Ui.java BaseUi.java PhoneUi.java Ui接口

  WebViewController.java WebViewFactoty.java WebView一些接口


0 0
原创粉丝点击