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一些接口
- Android 原生浏览器 (Browser Activity)分析(一)
- Android 原生浏览器 (Browser Activity)分析(二)
- android原生browser分析(一)--Application
- android原生browser分析(二)--界面篇
- android原生browser分析(二)--界面篇
- android原生browser分析(1)-Application
- android原生browser分析(2)--界面篇
- Android Browser App 源码分析(一)
- android源生Browser分析(一)--loadUrl APP层分析
- Android Browser源码分析(一)Application初始化
- Android 浏览器Browser二次开发(一) 更改浏览器设置中的搜索引擎
- Android 浏览器Browser二次开发(一)更改浏览器设置中的搜索引擎
- android 浏览器Browser(1)
- android 浏览器Browser(2)
- Android浏览器Browser二次开发(三)浏览器全屏显示
- Android浏览器Browser二次开发(四)浏览器中的APN切换
- Android浏览器Browser二次开发(四)浏览器中的APN切换
- Android浏览器Browser二次开发(三)浏览器全屏显示
- Android沉浸式顶栏的实现
- LZW压缩(解压缩)算法详解及源码
- java 远程调用 简单例子
- Android Weak Handler:可以避免内存泄漏的Handler库
- C# FileSystemWatcher 在监控文件夹和文件时的用法
- Android 原生浏览器 (Browser Activity)分析(一)
- 影音采集项目中对线程的理解
- Debian上SCST的设置
- C# WEb中的html 模块化#include ("dsfga.html") 和parse 总结与区别
- bearcat - 让前端也流畅使用依赖注入
- 【第一周】最大子列和问题整理
- 如何选购服务器
- 浅谈ios开发---动画
- bearcat 0.3.4 发布 -- 优化依赖注入写法