Android Browser源码分析(一)Application初始化
来源:互联网 发布:绝地求生什么时候优化 编辑:程序博客网 时间:2024/06/03 22:46
Android自带的Browser应用是从Application开始启动的,Application的主要作用是初始化一些全局使用对象,在这里Application采用了单例模式,这些单例会从程序启动一直存在到程序结束,比较消耗内存。因此在采用全局初始化单例模式时因尽量少一些。
Browser.java:
public class Browser extends Application { private final static String LOGTAG = "browser"; // Set to true to enable verbose logging. final static boolean LOGV_ENABLED = false; // Set to true to enable extra debug logging. final static boolean LOGD_ENABLED = true; @Override public void onCreate() { super.onCreate(); if (LOGV_ENABLED) Log.v(LOGTAG, "Browser.onCreate: this=" + this); // 创建当前上下文的CookieSyncManager CookieSyncManager.createInstance(this);//实例化CookieManager,让浏览器使用CookieManager时使用同一个CookieManager。 BrowserSettings.initialize(getApplicationContext());//实例化浏览器偏好设置。 Preloader.initialize(getApplicationContext());//预加载,浏览器首次启动后激活,当浏览器后台运行再次被调用时提高加载速度。 }}
Application的代码比较简单,主要对三个对象进行了初始化,下面分别来看这三个类的作用:
CookieSyncManager:初始化浏览器全局的cookie,这是Android自带的一个Cookie类,主要对浏览器进行缓存处理。具体用法可参考官方文档;
BrowserSettings:初始化浏览器的偏好设置、帐号信息、UA标识等;
BrowserSettings.java(片段):
public class BrowserSettings implements OnSharedPreferenceChangeListener, PreferenceKeys { private BrowserSettings(Context context) { mContext = context.getApplicationContext(); mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);//获取默认的偏好设置 mManagedSettings = new LinkedList<WeakReference<WebSettings>>();//WebView设置 mCustomUserAgents = new WeakHashMap<WebSettings, String>();//UA标识 BackgroundHandler.execute(mSetup);//载入浏览器配置 }; private Runnable mSetup = new Runnable() { @Override //根据虚拟机大小,设置网页缓存数目以及磁盘缓存。 public void run() { DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); mFontSizeMult = metrics.scaledDensity / metrics.density; // the cost of one cached page is ~3M (measured using nytimes.com). For // low end devices, we only cache one page. For high end devices, we try // to cache more pages, currently choose 5. if (ActivityManager.staticGetMemoryClass() > 16) { mPageCacheCapacity = 5; } mWebStorageSizeManager = new WebStorageSizeManager(mContext, new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()), new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath())); // Workaround b/5254577 mPrefs.registerOnSharedPreferenceChangeListener(BrowserSettings.this); if (Build.VERSION.CODENAME.equals("REL")) { // This is a release build, always startup with debug disabled setDebugEnabled(false); } if (mPrefs.contains(PREF_TEXT_SIZE)) { /* * Update from TextSize enum to zoom percent * SMALLEST is 50% * SMALLER is 75% * NORMAL is 100% * LARGER is 150% * LARGEST is 200% */ switch (getTextSize()) { case SMALLEST: setTextZoom(50); break; case SMALLER: setTextZoom(75); break; case LARGER: setTextZoom(150); break; case LARGEST: setTextZoom(200); break; } mPrefs.edit().remove(PREF_TEXT_SIZE).apply(); } sFactoryResetUrl = mContext.getResources().getString(R.string.homepage_base); if (sFactoryResetUrl.indexOf("{CID}") != -1) { sFactoryResetUrl = sFactoryResetUrl.replace("{CID}", BrowserProvider.getClientId(mContext.getContentResolver())); } synchronized (BrowserSettings.class) { sInitialized = true; BrowserSettings.class.notifyAll(); } } };}
PreLoader: 实现预加载,提高加载速度;
PreLoader.java(片段):
public class Preloader {private Preloader(Context context) { mContext = context.getApplicationContext(); mHandler = new Handler(Looper.getMainLooper()); mSession = null; mFactory = new BrowserWebViewFactory(context); }}
代码中提到一个BrowserWebViewFactory类,在后面会具体分析这个类的作用;
以上就是Application启动后需要做的工作,代码比较简短,内容也比较简单;
0 0
- Android Browser源码分析(一)Application初始化
- Android Browser学习一 application的初始化
- Android Browser App 源码分析(一)
- Android Browser源码分析(二)BrowserActivity初始化
- android原生browser分析(一)--Application
- Application初始化源码分析
- Android Browser App 源码分析(二)
- android原生browser分析(1)-Application
- android源生Browser分析(一)--loadUrl APP层分析
- Android 原生浏览器 (Browser Activity)分析(一)
- ImageLoader源码分析(一)ImageLoader初始化
- struts2源码分析(一)(初始化)
- Android Wi-Fi源码分析之wpa_supplicant初始化(一)
- ejabberd16.06源码分析(一) application启动
- ejabberd源码分析《一》application启动
- ejabberd源码分析《一》application启动
- Android Browser App 源码分析(三)之UI篇第一讲
- Nginx源码分析-启动初始化过程(一)
- Go如何实现枚举小实例分享
- IntelliJ IDEA 12调试窗口、帮助窗口、搜索框等中文乱码问题解决
- hdu 1698(线段树区间更新)
- 安装hustoj
- 堆、栈
- Android Browser源码分析(一)Application初始化
- 面试相关之位运算
- 关于多线程之间的同步常用的三种方法
- iOS加速度传感器
- iOS用来获取设备上的网络状态(2G,3G,WIFI...)
- 解决 The same input jar is specified twice 问题
- UI基础UIButton
- SOA-面向服务架构
- jQuery自学教程(五)——事件对象