【Android】WebView 开发遇到的问题小结

Android WebView性能优化专项解析:从加载到交互的全方位提速 本文聚焦Android开发中WebView的性能优化问题,针对加载延迟、白屏卡顿、内存泄漏等常见痛点,提出系统化解决方案。从加载速度、渲染效率、内存管理和交互体验四个维度,详细介绍了预初始化WebView、资源缓存策略、硬件加速配置、JS执行优化等关键技术手段,并提供了生命周期管理规范和异常监控方法。通过量化指标验证优化效果,最终实现WebView性能的全面提升,达到接近原生应用的体验效果。 阅读详情

在这里插入图片描述
这几天在AndroidStudio上利用WebView进行应用打包,期间遇到的几点问题有必要进行总结,在AS3.x上还是有一些不同,写Android SDK版本的更新带来的问题。在每个问题下可能会有相应的参考链接,这是在探索webView过程中起到帮助作用的帖子,谢谢他们!

1、网络问题

下载包问题

下载AndroidSDK 相关文件的很耗时,网络状况不好的情况下很可能出现问题。最好就是能找有相关包的能直接拷贝过来。
Settings中配置HTTP代理
在这里插入图片描述
镜像服务器地址&更改hosts文件:参考:https://blog.youkuaiyun.com/cswoniu111/article/details/52187840

设置build.gradle(Project):
修改allprojects并添加:

allprojects {
    repositories {
        mavenCentral()
        maven { url "https://jitpack.io" }
        maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
        maven { url 'http://maven.oschina.net/content/groups/public/' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
        maven { url "http://maven.springframework.org/release" }
        maven { url "http://maven.restlet.org" }
        maven { url "http://mirrors.ibiblio.org/maven2" }
        maven {
            url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/"
        }
        maven { url 'https://maven.fabric.io/public' }
        jcenter()
        google()
    }
}

从上述的库中选择其中一个即可,推荐aliyun的。例如:

allprojects {
    repositories {
        maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
        mavenCentral()
        jcenter()
        google()
    }
}

参考:https://blog.youkuaiyun.com/u011216417/article/details/73480899

2、全屏显示

设置全屏的时候,会发生闪退,原因在于你的Activity是否继承自AppCompatActivity,如果是的把AppCompatActivity改成Activity:

public class MainActivity extends Activity

参考:https://blog.youkuaiyun.com/key_mql/article/details/70163426

3、 Webview加载url空白,但浏览器能打开

你可能会遇到这种情况,有的url能打开,有的不能。这主要和webview的缓存问题有关。
在你的代码中添加这句:

WebSettings webSettings = webView.getSettings();
webSettings.setDomStorageEnabled(true);//主要是这句
webSettings.setJavaScriptEnabled(true);//启用js
webSettings.setBlockNetworkImage(false);//解决图片不显示
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setLoadsImagesAutomatically(true);
webView.setWebChromeClient(new WebChromeClient());//这行最好不要丢掉
//该方法解决的问题是打开浏览器不调用系统浏览器,直接用webview打开
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
});
webView.loadUrl("http://xxx.cn");

参考:https://blog.youkuaiyun.com/u011124212/article/details/82118073?tdsourcetag=s_pctim_aiomsg

4、启动模拟器失败,缺少模拟器加速器问题

android studio 启动模拟器报错The emulator process for AVD Nexus_5X_API_22 was killed

这个问题可能是HAXM没有安装,你可以先去Android SDKManager 中进行安装:
在这里插入图片描述

参考:https://bbs.youkuaiyun.com/topics/392424550?page=1

5、gradle sync failed 问题

安装AS过程中常会碰到这类问题,你可以先到settings中设置你的gradle绝对路径:
在这里插入图片描述

参考:https://blog.youkuaiyun.com/m0_37292262/article/details/81395369

6、签名打包

在机子上安装APK时,可能会提示你安装失败,不是验证过的应用。这个时候可能是你打包时出现的问题。
通常,用签名打包是比较严格的方式:

签名:就代表着自己的版权,以后要进行升级,也必须要使用相同的签名才行。签名就代表着自己的身份(即keystore),多个app可以使用同一个签名。

我们可以通过AS进行签名打包:

在这里插入图片描述

参考:https://www.cnblogs.com/gao-chun/p/4891275.html

7、修改项目包名

为了方便,你可能想拷贝上一个项目,但是打包的时候却发现覆盖了上一个项目的应用。这里的问题就是在使用这个拷贝的项目时,你没有修改相应的包名。
通常分为4个步骤:

  1. 修改项目中build.gradle文件中的 “applicationId”;
  2. 修改AndroidManifest.xml文件中的 “package”,和 build.gradle 文件中的 "applicationId"保持一致;
  3. 重命名工程目录中的对应的 Directory;
  4. Sync Now一下。

参考:https://baijiahao.baidu.com/s?id=1578514127792124806&wfr=spider&for=pc

8、Android WebView加载网页失败异常处理

不同Android版本下处理不同,这里给出Android6.0+的处理方法,网上有很多处理方法,但是试过之后发现并不奏效!

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
    super.onReceivedError(webView, webResourceRequest, webResourceError);
    if (webResourceRequest.isForMainFrame()) {//是否是为 main frame创建
        view.loadUrl("about:blank");// 避免出现默认的错误界面
        view.loadUrl(mErrorUrl);// 加载自定义错误页面
    }
}

参考:https://www.jianshu.com/p/12a011af51c4

9、原生按钮点击事件

网上的例子都不太奏效,有的说要在AndroidMainfest.xml中注册,有的使用Button定义的点击方法。
我的方式是:

  • 在xml中写好Button的ID,如
		<Button
            android:id="@+id/btnReturnMenu" //命名一个id为btnReturnMenu的Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_x="970dp"
            android:layout_y="1470px"
            android:background="?android:attr/colorActivatedHighlight"
            android:text="@string/menu_btn"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:textColor="?android:attr/colorBackground"
            android:visibility="visible"
            android:onClick="onReturnMenu"
            tools:layout_editor_absoluteX="100dp"
            tools:layout_editor_absoluteY="164dp" />
  • java文件中,定义这个Button:
 private Button btnReturnMenu;
 btnReturnMenu = (Button)findViewById(R.id.btnReturnMenu);//找到这个ID
 //注册点击监听事件
 btnReturnMenu.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                {
                    webView.loadUrl("http://118.122.250.177:18888/Commandnav/index.html");
                }
            }
});

10、判断网络是否可用

public static boolean isNetworkAvailable(Context context) {
        if(context!=null){
            ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = connectivity.getActiveNetworkInfo();
            if(mNetworkInfo!=null){
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

11、思考:打包一个chrome内核,优化H5的流畅度

我们经常看到微信的浏览器内核使用的时X5内核,那能不能尝试在APP中包裹一个Chrome内核呢?
这个我还没尝试过。
但是发现,X5内核在渲染图形方面,表现不佳,如canvas,极易造成卡顿,相比Chrome内核还是有差距。

参考:https://www.oschina.net/question/1176258_241816

12、Android WebView 详细

分享几篇WebView开发的文档:

WebView-WebViewClient详解

WebViewClient与常用事件监听

Android之Android WebView常见问题及解决方案汇总

Android WebView 总结 —— 使用HTML5播放视频及全屏方案

最后分享一句在挖坑过程中遇到的一句话吧:
通往成功的路上忍得了寂寞和孤独

已经有段时间没写Blog,这一段都比较忙,下期见!

秒开WebView?Android性能优化全攻略 本文将介绍一些优化WebView性能的方法,帮助开发者实现秒开的WebView。当WebView需要处理某些事件时,如页面加载、错误处理等,可以重写WebViewClient类的方法来实现自定义处理。通过以上方法,可以有效地优化WebView的性能,实现秒开的WebView。需要注意的是,不同的应用场景可能需要针对性地调整优化策略。通过设置合适的缓存策略,可以减少WebView对网络的请求次数,从而提高页面加载速度。虽然硬件加速可以提高WebView的性能,但在某些情况下,它可能会导致页面加载变慢。 阅读详情

相关推荐

Android WebView 常见问题及处理方案

目前html5发展非常迅速,很多native app都会嵌入到网页中,以此来适用多变的市场需求。但是android的webview默认支持的功能非常弱,很多地方都是需要自定义的,才能达到我们想要的效果。并且webview在不同的版本会有不同程度的bug。下面小编把webview经常出现的问题给大家整理如下: 1.为WebView自定义错误显示界面: /** * 显示自定义错误提示页面,用一个View覆盖在WebView */ protected void showErrorPage() { LinearLayout webParentView = (LinearLayou

android 盒子webview卡死,Android WebView常见的坑和解决方案

一、WebView常见的一些坑1、内存泄漏由于WebView是依附于Activity的,Activity的生命周期和WebView启动的线程的生命周期是不一致的,这会导致WebView一直持有对这个Activity的引用而无法释放,解决方案如下三种:解决方案:(1)独立进程,简单暴力,不过可能涉及到进程间通信。使webview产生了oom崩溃等问题也不会影响到主程序。方法:在androidmani...

weixin_42395462的博客 6810

从零搭建Python接口自动化测试框架:pytest+requests+Allure实战指南

接口自动化测试是现代软件工程中保障交付质量、提升测试效率的核心实践。其基本原理是通过脚本模拟客户端请求,对服务端接口进行自动化的功能验证、性能探测与回归测试,从而替代重复的手工操作。在技术实现上,Python凭借其简洁语法和丰富的生态,成为构建此类框架的主流选择,其中pytest测试框架、requests HTTP库和Allure报告工具构成了技术栈的黄金组合。这套技术方案的价值在于,它能将测试用例数据(如YAML文件)与执行逻辑分离,实现数据驱动测试,并通过持续集成(如Jenkins)无缝融入DevOps

weixin_31822733的博客 378

Android开发使用webView出现一些网页加载不出来,或者卡在加载界面解决

这些权限全部要加上,就所有网页都能出现了。

xunandysy的博客 3910

实战测评:4大搜索API(You.com/Tavily/Exa/Perplexity)谁更适合你的AI项目?附Python调用代码

本文实战测评了You.com、Tavily、Exa和Perplexity四大搜索API在AI项目中的集成应用,详细对比了它们的技术特性和Python调用方法。针对LLM实时数据需求,You.com的优化设计表现突出,支持32k大上下文窗口和快速响应。文章提供了完整的代码示例和场景化选型建议,帮助开发者高效集成搜索API到AI项目中。

weixin_42569329的博客 477

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2349

Android开发精选文章推荐

[xml解析]学习笔记之SAX解析 解析XML文件时,有三种方式,其中SAX解析由于占用内存较小,比较适合Android开发中使用构建一个XML解析工具类. http://www.apkbus.com/blog-113729-45127.html Android——横屏和竖屏的切换,以及明文密码的显示 在手机的使用中,我们要根据不同的需求来改变屏幕的显示方向,一般在浏览信息时是竖屏,在

极致的专注 无限的热情 3176

【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果

主成分分析(Principal Component Analysis, PCA)是一种常用的机器学习和数据分析技术,用于降低数据维度、识别数据中的模式、发现变量之间的关系等。

一伦明悦的博客 1261

Android学习之 WebView使用小结

这段时间基于项目需要 在开发中与WebView的接触比较多,前段时间关于HTML5规范尘埃落定的消息出现在各大IT社区头版上,更有人说:HTML5将颠覆原生App开发 虽然我不太认同这一点 但是关于HTML5+JS+CSS+Native的跨平台开发模式还是为很多企业节省了开发资源和成本、一定程度上提升了WebView的使用率和地位。 网上关于HTML5规范定稿的一篇见解文章: ht

小吕丶Code阶区 5985

大话西游2单机版V8一键架设教程:从下载到GM权限全流程(附仙玉修改技巧)

本文详细讲解了大话西游2单机版V8的一键架设全流程,包括环境准备、服务端配置、客户端安装及GM权限获取等关键步骤。特别提供了仙玉修改技巧和高级资源管理方法,帮助玩家快速搭建个性化游戏环境并掌握核心控制功能。教程涵盖Windows系统兼容性设置、常见问题解决方案以及数据备份策略,适合各类怀旧玩家和技术爱好者。

weixin_29254673的博客 1032

ADK 第一篇 Google Agent Development Kit 简介

是一个灵活且模块化的框架,专为开发和部署AI智能体而设计。虽然ADK针对Gemini和Google生态系统进行了优化,但它与模型无关、与部署环境无关,并兼容其他框架。ADK的核心理念是让智能体开发更接近传统软件开发模式,从而帮助开发者更轻松地构建、部署和编排智能体架构——无论是处理简单任务,还是管理复杂工作流。:利用预置工具、自定义函数、OpenAPI规范或集成现有工具,赋予智能体多样化能力,实现与谷歌生态系统的深度整合。

2501_90353350的博客 3042

Android WebView漏洞小结

0x00 背景 WebViews在Android应用程序中用于在应用程序中加载内容和HTML页面。由于此功能,WebView的实现必须是安全的,以免引入应用程序的巨大风险。本文的目的是检查将使WebView不太安全的事情,从而检查应用程序本身。开发人员和渗透测试人员在进行移动渗透测试时都可以使用本文作为参考。 加载明文内容 如果WebView允许从Internet加载明文内容,那么它将对各种形式的...

Tesi1a的充电桩 2826

【云原生技术】sonar的官方web接口,获取质量阀结果的接口

以下是一个示例思路,说明如何调用 SonarQube 的质量阀查询接口并在前端展示“哪些条件没过”。假设前端使用 AJAX 或 fetch 从后端接口拿到 SonarQube 返回的 JSON(或直接前端请求 SonarQube API),前端再把解析结果展示给用户。测试覆盖率 (Coverage) 当前仅有 60%,未满足最低 80% 的要求,需要补充测试或优化以提升覆盖率。接口),就会返回相应的质量阀状态信息;里使用它来查询当前质量阀(质量门)的状态。,你用它即可获取该次分析的质量阀状态。

weixin_46453070的博客 1278

WebView 在Android端使用小结

Web在Android端使用小结 参考 AndroidUI4Web:最适合Android开发者的WebApp框架 AgentWeb

初心一点的专栏 296

C++11、C++14 和 C++17 标准新特性详解

特性C++11C++14C++17auto类型推导✅范围 for 循环✅Lambda 表达式✅✅✅智能指针✅移动语义✅nullptr✅统一初始化{}✅✅constexpr✅✅✅✅数字分隔符✅结构化绑定✅✅✅文件系统库✅。

h a 6 6 6 c k 为 你解决复杂难题! 439

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

H5在WebView上开发小结

背景 来自我司业务方要求,需开发一款APP。但由于时间限制,只能采取套壳app方式,即原生app内嵌webview展示前端页面。本文主要记述JavaScript与原生app间通信,以及内嵌webview开发时,前端方面可能踩的一些坑。 技术架构 前端:vue+vuex+vue-router+webpack全家桶开发 后端:Node(express框架)简单转发接口至java-真后端接口。 js与原...

weixin_33754913的博客 448

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android开发中问题小结

Android开发中问题小结

高磊的专栏 1999

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android webview内存泄漏,WebView内存泄漏--解决方法小结

有些东西还是记下来比较好,记记随笔,欢迎批评建议。前段时间在项目中就用到webview展示大量的新闻资讯页面,然后就惊喜的出现内存泄漏了,于是乎我在网上查了一些资料然后在这里总结一下解决方法,欢迎拍砖。(方法4划重点)。Android混合开发时经常用到WebView加载html等页面,而WebView的内存泄漏就是最经常遇到的问题,尤其是当项目中需要用webview加载的页面比较多时。即使当我退出...

weixin_34729012的博客 1777

android定义webview的作用区域,Android开发中WebView的简单使用小结

前言WebView(网络视图)在Andorid中就是用来显示网页的,下面我们来一起看看它是如何使用的。一、基本使用1.声明权限,WebView不可避免地要用到网络,我们要加上网络访问权限。2.放入Layoutandroid:layout_height="match_parent"android:id="@+id/web">3.在Activity中引用private WebView webVi...

weixin_36040020的博客 277

android webview capturepicture,android中Webview实现截屏三种方式小结

本人最近学习了android中Webview实现截屏三种方式,下面我来记录一下,有需要了解的朋友可参考。希望此文章对各位有所帮助。第一种方式通过调用webview.capturePicture(),得到一个picture对象,根据图像的宽和高创建一个Bitmap,再创建一个canvas,绑定bitmap,最后用picture去绘制。//获取Picture对象Picture picture = wv...

weixin_39620334的博客 657

android webview 63版,Andriod WebView 填坑小结(不定期更新)

[TOC]在学习WebView的时候就知道了WebView会出现很多稀奇古怪的问题,真碰上的时候还是焦头烂额,很多问题的解决方案要在网上找很久很久很久,只能说MMP。这里做了稍微全面的总结。划重点:1.内存泄露的解决方法2.Native获得的cookie同步到WebView中3.API5.0以上Ajax跨域访问无法携带cookie的问题4.Alert劫持问题1. 内存泄露关于内存泄漏,想要彻底解决...

weixin_30495795的博客 444

【Android】- 秒开WebView:安卓性能优化攻略

在移动开发中,WebView是一个非常实用的组件,允许开发者在Android应用中嵌入网页。WebView的加载速度常常成为用户体验的瓶颈。本文将探讨如何优化WebView的启动速度,实现秒开的效果。

Swxctx 898

android 中webview基本使用的方法小结

随着使用h5和其他前端技术开发的webapp 应用越来越多,使用原生开发的app 有时候需要嵌入一些新的网页,众所周知webview控件中可以加载网页。下面就一些使用方法进行简单的小结,其实使用技巧还是蛮多的。 0.WebView的实质就是loadUrl,所以前提是设备接入网络,首先进行网络的判断。 // 网络状态 public boolean isNetworkConnected(Cont

ABC__D的专栏 4263

android webview排版,Android编程实现WebView自适应全屏方法小结

本文实例讲述了Android编程实现WebView自适应全屏的方法。分享给大家供大家参考,具体如下:第一种:settings.setUseWideViewPort(true);settings.setLoadWithOverviewMode(true);第二种:WebSetting settings = webView.getSettings();settings.setLayoutAlgorit...

weixin_35715235的博客 601

安卓之WebView的使用小结

前一段时间看了一下WebView的内容,自己试着写了几个小的程序。现在进行一下个人的小结,为了以后自己忘记的时候还可以看看。 在Android系统中内嵌了一个高性能的webkit内核浏览器,在SDK中封装为一个叫做WebView组件,通过这个组件可以像浏览器一样地去解析网页。使用的时候可以直接加载网址进行浏览。 那么什么是webkit?官方的解释是:WebKit是Mac OS X v10.3及以上版

Atomwh的专栏 934
上一篇: 【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具
下一篇: 【Docker】基于实例项目的集群部署(一)安装环境搭建 | CentOS7 | FTP | XShell
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值