android6.0原生brower_Android Browser学习一 application的初始化

Android Browser 是一个非常好的学习资料, 使用了自己设计的MVC架构,来管理书签, 浏览器 等各个功能,有具有一定的稳定性,知道我们学习

Browser是从Application开始启动的,启动流程如下:

代码很简单:

01

public class Browser extends Application {

02

03

04

private final static String LOGTAG = "browser";

05

06

// Set to true to enable verbose logging.

07

final static boolean LOGV_ENABLED = false;

08

09

10

// Set to true to enable extra debug logging.

11

final static boolean LOGD_ENABLED = true;

12

13

14

@Override

15

public void onCreate() {

16

super.onCreate();

17

if (LOGV_ENABLED)

18

Log.v(LOGTAG, "Browser.onCreate: this=" + this);

19

20

21

// create CookieSyncManager with current Context

22

//初始化cookie

23

CookieSyncManager.createInstance(this);

24

//在application 启动的时候实例化浏览器的配置BrowserSetting, 和 一下需要预先 载入的东西 Preloader等待以后调用

25

BrowserSettings.initialize(getApplicationContext());

26

Preloader.initialize(getApplicationContext());

27

}

28

29

30

}

主要功能是设置一些Debug的开关,初始化一下全局的模块,包括:CookieSyncManager, BrowserSettings ,PreLoader.

那么看一下他们分别是用来做什么的

CookieSyncManager: 初始化浏览器全局的cookie, 这是Android系统的类. 这个我们在做WebView开发的时候可能也用过.

Android通过使用这个类来实现Ram和硬盘中cookie的同步,提高了cookie的访问速度

BrowserSettings :初始化浏览器的偏好设置, UA , WebView的设置 ,个人账户信息, 等

具体代码:

1

private BrowserSettings(Context context) {

2

mContext = context.getApplicationContext();

3

mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);//用来取xml的数据

4

mAutofillHandler = new AutofillHandler(mContext); //账户个人信息

5

mManagedSettings = new LinkedList>();//WebView的设置

6

mCustomUserAgents = new WeakHashMap(); //UA

7

mAutofillHandler.asyncLoadFromDb(); //异步载入个人信息

8

BackgroundHandler.execute(mSetup); //载入浏览器配置

9

}

有一个小点:根据dvm虚拟机的大小设置 内存缓存的网页数目 ,以及磁盘缓存

1

DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();

2

mFontSizeMult = metrics.scaledDensity / metrics.density;

3

// the cost of one cached page is ~3M (measured using nytimes.com). For

4

// low end devices, we only cache one page. For high end devices, we try

5

// to cache more pages, currently choose 5.

6

//这是获取dvm的一个大体值 16m  24m 32m ...然后设置浏览器缓存多少网页

7

if (ActivityManager.staticGetMemoryClass() > 16) {

8

mPageCacheCapacity = 5;

9

}

1

//磁盘缓存空间

2

mWebStorageSizeManager = new WebStorageSizeManager(mContext,

3

new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()),

4

new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath()));

将来BrowserSetting还会通过Controller和UI进行很多的交换,而且在Browser启动的时候是全局都要用到的,因此作出了全局唯一的单例

PreLoader: 如果Brower在后台,或者还在内存中,再次调用browser的时候就不会重新创建Webview等控件,提高启动的速度,主要是通过hold了一个含有webview的mSession,然后利用了application 部分内存不会轻易释放 来实现的. 具体后面会继续分析,

1

private Preloader(Context context) {

2

mContext = context.getApplicationContext();

3

mHandler = new Handler(Looper.getMainLooper());

4

mSession = null;

5

mFactory = new BrowserWebViewFactory(context);

6

7

}

这样Application的启动就ok了

可以看到, 作者把一些App全局需要用到的东西放到了Application中初始化, 并且这些东西都是单例的,这一在app周期中他们将一直存在, 后面的组件只要调用getInstance就可以使用了.不过这里有个问题, 这些单例会占用app的内存直到app退出,所以全局初始化的东西应该尽量少一些.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值