Hybrid学习记录

本文详细介绍了Hybrid应用的初始化、交互、混淆处理以及优化策略。在初始化阶段,包括加载、暂停、关闭WebView的管理,以及导航、缓存和存储的设置等。交互部分讲解了JavaScript的互调、文件下载和长按事件处理。混淆部分提到了内部类的处理。在优化方面,提出了全局WebView、并行加载和预加载等方法,旨在提升用户体验。
摘要由CSDN通过智能技术生成

一、初始化

1.加载

//方式1. 加载一个网页:
webView.loadUrl("http://www.google.com/");

//方式2:加载apk包中的html页面
webView.loadUrl("file:///android_asset/test.html");

//方式3:加载手机本地的html页面
webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");

//方式4:加载某一段代码
val body = "示例:这里有个img标签,地址是相对路径[外链图片转存失败(img-8vlE8Da6-1562229182334)(https://mp.csdn.net/uploads/allimg/130923/1FP02V7-0.png)]";
//baseUrl表示基础的网页,data表示要加载的内容,mimeType表示加载网页的类型
//encoding表示编码格式,historyUrl表示可用历史记录
webView.loadDataWithBaseURL("http://www.jcodecraeer.com", body, "text/html", "utf-8",null);

防止域控制不严格漏洞

settings.setAllowFileAccessFromFileURLs(false);
settings.setAllowUniversalAccessFromFileURLs(false);

2.暂停

override fun onPause() {
    //通知内核尝试停止所有处理,如动画和地理位置,但是不能停止Js
    webView.onPause()
    //全应用程序的webView都会被暂停,降低CPU功耗
    webView.pauseTimers()
    //若加载的 html 里有JS 在执行动画等操作,需要关闭Javascript支持
    settings.setJavaScriptEnabled(false)
    super.onPause()
}

override fun onResume() {
    //重新激活WebView
    webView.onResume()
    //恢复pauseTimers状态
    webView.resumeTimers()
    //若加载的 html 里有JS 在执行动画等操作,重新进入开启Javascript支持
    // 禁止 file 协议加载 JavaScript
    if (url.startsWith("file://")){
        settings.setJavaScriptEnabled(false)
    }else{
        settings.setJavaScriptEnabled(true)
    }
    super.onResume()
}

3.关闭
在关闭Activity时,如果WebView的音乐或视频,还在播放,就必须销毁Webview

override fun onDestroy() {
    super.onDestroy()
    //从当前父容器移除WebView,防止其持有Activity的引用
    constraintLayout.removeView(webView)
    //销毁WebView
    webView.destroy();
}

4.导航
用户点击back键会有两种情况,有前一页的页面,那么就后退,否则退出程序

override fun onBackPressed() {
    //是否可以后退一页,是则后退,否则退出程序
    if (webView.canGoBack()){
        webView.goBack()
    }else{
        finish()
    }
}

前进一页也要先判断是否有前一页
if (webView.canGoForward()){
    webView.goForward()
}

5.设置缓存

val settings = webView.getSettings()
if (OKHttpUtil.INSTANCE.isNetworkConnected()) {
    // 默认根据cache-control决定是否从网络上取数据
    settings.setCacheMode(WebSettings.LOAD_DEFAULT);
} else {
    // 没网,离线加载,优先加载缓存(即使已经过期)
    settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}

根据需要可以清除缓存

//清除整个应用程序的缓存,传入true表示同时内存与磁盘,false表示仅清除内存
webView.clearCac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值