当前位置: 首页 > 编程日记 > 正文

关于Android H5混合开发遇到的问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

添加WebChromeClient,复写onJsAlert、onJsConfirm、onJsPrompt方法后,弹框异常退出问题

项目经理说,Android没有处理弹框,点击按钮没有反应,iOS就可以。于是就复写了onJsAlert、onJsConfirm、onJsPrompt三个方法,来处理页面上的弹框。写完后满心喜悦的以为可以了,没想到项目经理说,点击按钮异常退出;然后自己查看日志:

08-06 10:41:53.023 29277-29339/com.medicine E/chromium: [ERROR:child_thread_impl.cc(762)] Request for unknown Channel-associated interface: ui::mojom::GpuMain
08-06 10:41:53.036 29277-29338/com.medicine E/libEGL: cache file failed CRC check

然并卵,这样的日志并不能查找出问题,还好红米手机有捕捉异常的功能,详细异常如下:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Xiaomi/hennessy/hennessy:5.0.2/LRX22G/V9.6.1.0.LHNCNFD:user/release-keys'
Revision: '0'
ABI: 'arm64'
pid: 27850, tid: 27850, name: medicine  >>> com.medicine <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: '[FATAL:jni_android.cc(243)] Please include Java exception stack in crash report
'x0   0000000000000000  x1   0000000000006cca  x2   0000000000000006  x3   0000007fae06a0f0x4   0000007fae06a0f0  x5   0000000000000005  x6   0000000000000001  x7   0000000000000020x8   0000000000000083  x9   0000007fd82d9043  x10  0000007fd82d8ff8  x11  0000000000000001x12  0000000000000001  x13  0000000000000054  x14  0000007f9d9dd7c8  x15  0000007fae035bc0x16  0000007fae02d7e0  x17  0000007fadff258c  x18  0000000000000000  x19  0000007fae06a0f0x20  0000007fae06a3a8  x21  0000007fae033000  x22  000000000000000b  x23  0000000000000006x24  0000007fd82d98f0  x25  0000007fd82d9ab8  x26  0000000061100021  x27  000000007a90001dx28  00000055bc8f0a60  x29  0000007fd82d9320  x30  0000007fadfaeb6csp   0000007fd82d9320  pc   0000007fadff2594  pstate 0000000060000000backtrace:#00 pc 0000000000061594  /system/lib64/libc.so (tgkill+8)#01 pc 000000000001db68  /system/lib64/libc.so (pthread_kill+160)#02 pc 000000000001f09c  /system/lib64/libc.so (raise+28)#03 pc 0000000000018abc  /system/lib64/libc.so (abort+60)#04 pc 0000000000771f20  /system/app/WebViewGoogle/lib/arm64/libwebviewchromium.so

虽然获取到了更多的信息,我还是想哭,还是没有一点用处,都是底层框架的错误信息,对于查找错误还是云里雾里,只好去排查代码。既然是复写onJsAlert、onJsConfirm、onJsPrompt三个方法后,报错就查看具体复写的代码,一下是复写代码详情:

@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {new AlertDialog.Builder(view.getContext()).setTitle("对话框").setMessage(message).setPositiveButton("确定", (dialog, which) -> {result.confirm();dialog.dismiss();}).setCancelable(false).show();return true;
}@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {new AlertDialog.Builder(view.getContext()).setTitle("对话框").setMessage(message).setPositiveButton("确定", ((dialog, i) -> {result.confirm();dialog.dismiss();})).setNegativeButton("取消", (dialogInterface, i) -> result.cancel()).setOnCancelListener(dialogInterface -> result.cancel()).show();return true;
}@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {final EditText et = new EditText(view.getContext());et.setSingleLine();et.setText(defaultValue);new AlertDialog.Builder(view.getContext()).setTitle("对话框").setMessage(message).setView(et).setPositiveButton("确定", ((dialog, i) -> {result.confirm(et.getText().toString());dialog.dismiss();})).setNegativeButton("取消", (dialogInterface, i) -> result.cancel()).setOnCancelListener(dialogInterface -> result.cancel()).show();return true;
}

查看代码的时候,发现new AlerDialog的时候用的是view.getContext(),然后发现new WebView()的时候用的是getApplicationContext();我们知道AlertDialog的Context只能是Activity,所以发现问题;把getApplicationContext()改为当前Activity后,问题就解决了。

移动端日历控件ICalendar.js在Android息屏后,不能选择时间,时间只能是当前时间

测试人员说,Android端在选择时间的时候失败,只可以选择当前时间。于是自己测试,第一次进入可以选择时间,没有问题;但是当锁屏后,再次进入页面后,可以弹出日期选择框,滚动日期的时候,明显发现日期滚动不顺畅,并且预期的时间并没有出现,而是默认的当前时间。

找到问题所在,然后查找问题根源在哪里:既然是在锁屏后出现问题,会不会是onPause()和onResume()方法里面的问题呢;心中有了这样的想法后就把onPause()和onResume()注释了,再次运行,发现日期选择正常了;如此看来,的确是onPause()和onResume()方法里面出现问题了。这两个方法是从网上找来的,具体代码如下:

@Override
protected void onResume() {super.onResume();if (mWebView != null) {mWebView.onResume();}
}@Override
protected void onPause() {super.onPause();if (mWebView != null) {mWebView.onPause();mWebView.pauseTimers();}
}

copy的代码也没有深究,但是发现有个方法没有成对出现mWebView.pauseTimers(),然后查看源代码,文档解释为:

Pauses all layout, parsing, and JavaScript timers for all WebViews. This is a global requests, not restricted to just this WebView. This can be useful if the application has been paused.

机器翻译为:暂停所有WebView的所有布局,解析和JavaScript计时器。此是全局请求,不仅限于此WebView。如果应用程序已暂停,这可能很有用。

然后再WebView源码中发现pauseTimers()方法下面就是resumeTimers()方法,喜出望外,文档解释为:

Resumes all layout, parsing, and JavaScript timers for all WebViews. This will resume dispatching all timers.

机器翻译为:恢复所有WebView的所有布局,解析和JavaScript计时器。 这将继续调度所有计时器。

于是,恢复注释的代码,在Activity的onResume()方法中加上mWebView.resumeTimers(),运行项目,发现问题解决。因此,具体问题是在Activity息屏后调用webview的pauseTimers()方法,把js功能暂停;但是在onResume()没有恢复运行,所以造成这个问题。

转载于:https://my.oschina.net/deepSprings/blog/1923103

相关文章:

手动配置lnmp环境

做php开发的&#xff0c;想要进一步提升自己&#xff0c;手动搭建开发环境&#xff0c;我想是必须经历的一个坎。虽然说有很多第三方集成环境可供使用&#xff0c;但我想说的是在你没有自己搭建过一次环境的时候&#xff0c;你没有太多的资本去“偷懒”。虽然我自己也是个菜鸟&…

负载均衡,会话保持,session同步

一&#xff0c;什么负载均衡一个新网站是不要做负载均衡的&#xff0c;因为访问量不大&#xff0c;流量也不大&#xff0c;所以没有必要搞这些东西。但是随着网站访问量和流量的快速增长&#xff0c;单台服务器受自身硬件条件的限制&#xff0c;很难承受这么大的访问量。在这种…

终于“打造”出了一个可以随时随地编程的工具

作者 | 老表来源丨简说Python分享概要 系统&#xff1a;阿里云ECS共享型n4服务器 1核2g 存储50g&#xff08;双十一便宜买的&#xff0c;180元/3年&#xff09;环境&#xff1a;自带python3.6.8 方便演示&#xff0c;直接使用它开始动手动脑 首先我们需要连接上服务器&#xff…

JVM堆 栈 方法区详解

一、栈 每当启用一个线程时&#xff0c;JVM就为他分配一个JAVA栈&#xff0c;栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成&#xff0c;每当线程调用一个java方法时&#xff0c;JVM就会在该线程对应的栈中压入一个帧 只有在调用一个方法时&#xff0c;才为当前栈分配一…

ECSHOP学习笔记

帮助 http://help.ecshop.com/index.phpECSHOP各文件夹功能说明 1、根目录&#xff1a;前台程序文件2、admin&#xff1a;后台程序文件夹 --根目录&#xff1a;后台程序文件 *.php文件 --help\zh_cn&#xff1a;各功能的帮助文件 *.xml文件 --images&#xff1a;后台页面…

Redis主从复制配置

环境描述Redis Master&#xff1a;192.168.1.100 6379(Ubuntu系统)Redis Slave1&#xff1a;192.168.1.101 6380(Ubuntu系统)Redis Slave2&#xff1a;192.168.1.102 6381(Ubuntu系统) 安装redis分别在192.168.1.100、192.168.1.101、192.168.1.102三台机器上安装redis&#xf…

利用 Python 打造一个语音合成系统

作者 | thedaydreamer来源丨CSDN博客背景一直对语音合成系统比较感兴趣&#xff0c;总想能给自己合成一点内容&#xff0c;比如说合成小说&#xff0c;把我下载的电子书播报给我听等等。语音合成系统其实就是一个基于语音合成的工具&#xff0c;但是这个东西由于很多厂家都提供…

干货:排名前 16 的 Java 工具类!

2019独角兽企业重金招聘Python工程师标准>>> 干货&#xff1a;排名前 16 的 Java 工具类&#xff01; 在Java中&#xff0c;工具类定义了一组公共方法&#xff0c;这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名&#xf…

使用ecshop电子商务系统的100个小问题

总结100条关于操作ecshop电子商务系统的小问题。1:如何修改网站"欢迎光临本店"回答:languages\zh_cn\common.php文件中&#xff0c; $_LANG[welcome] 欢迎光临本店;将他修改成你需要的字样。2:如何修改首页"热门搜索关键字"回答:后台->系统设置->网…

MyCAT常用分片规则之分片枚举

MyCAT支持多种分片规则&#xff0c;下面测试的这种是分片枚举。适用场景&#xff0c;列值的个数是固定的&#xff0c;譬如省份&#xff0c;月份等。 在这里&#xff0c;需定义三个值&#xff0c;规则均是在rule.xml中定义。 1. tableRule 2. function 3. mapFile 首先&#xff…

手把手带你打造一款 签名设计 的GUI图形界面!

作者 | 黄伟呢来源丨数据分析与统计学之美1.概述 整体布局呢我们已经搭建起来&#xff0c;唯一没有实现的一个步骤就是&#xff0c;用户每输入一个名字&#xff0c;就会将个性签名一并显示在这个窗口界面中&#xff0c;今天我就带着大家一起完成这个需求。今天的文章可以看成是…

跨域资源共享 CORS

简介 CORS是一个W3C标准&#xff0c;全称是"跨域资源共享"&#xff08;Cross-origin resource sharing&#xff09;。它允许浏览器向跨源服务器&#xff0c;发出XMLHttpRequest请求&#xff0c;从而克服了AJAX只能同源使用的限制。 CORS需要浏览器和服务器同时支持。…

SMARTY核心

http://www.smarty.net/http://smarty.php.net/manual/en/1.配置define("ROOTPATH",dirname(__FILE__)."/../");require_once("smarty/Smarty.class.php");/*** Smarty Template Class Initializtion*/if( constant( "ENABLED_TPL" ) …

5G+XR:让视频增强技术在工业领域大有所为

据工业和信息化部统计显示&#xff0c;目前中国累计建成并开通5G基站142.5万个&#xff0c;基站总数今年有望突破200万个。自5G正式商用以来&#xff0c;凭借其高带宽、广连接、低延时等优势&#xff0c;5G应用的实践逐渐从最初的单一化业务触及至更广泛的行业应用场景中。其中…

IE的安全性设定增加“我的电脑”的安全性设定

HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\0&#xff0c;在右边窗口中找到DWORD值“Flags”&#xff0c;默认键值为十六进制的21(十进制33)&#xff0c;双击“Flags”&#xff0c;在弹出的对话框中将它的键值改为“1”即可&#x…

F# 4.5提供Spans、Match!等特性

F# 4.5预览版现已发布&#xff0c;其中提供了一系列新特性&#xff0c;包括对.NET Core 2.1的新原生类型Span\u0026lt;T\u0026gt;的支持、新关键字Match!等。\\类型Span意在实现底层代码指针操作的安全性和可预测性&#xff0c;这可使得很多情况下不必再分配内存&#xff0c;进…

ecshop transport.js/run() error:undefined

在使用ECshop的AJAX(即&#xff1a;transport.js) IE有时候会出现&#xff1a;ReferenceError: process_request is not defined&#xff0c;FF则出现&#xff1a;transport.js/run() error:undefined&#xff0c;其实这完全和transport.js无关。那么问题出在哪里呢&#xff1f…

为什么你不应该自行更新 Drupal 网站?

&#xff08;译注&#xff1a;这篇文章主要还是针对于非专业人员及个人Drupal站长&#xff0c;对于专业的 Drupal 团队和公司而言 Drupal 的升级更新都有规范的操作流程&#xff0c;完全是家常便饭&#xff0c;不可能出现文中出现的这些情况。尽管如此&#xff0c;里面也还是有…

用友发布新一代企业智能商旅及费控服务平台

3月31日&#xff0c;“便捷商旅 智能费控—2022用友BIP|商旅及费控服务新品发布会”成功举行。作为新一代企业智能商旅及费控服务平台&#xff0c;用友BIP商旅及费控服务以“连接 高效 智能 合规”为核心价值理念&#xff0c;致力于让5000万报销人拥有极致的体验&#xff0c;让…

RNN,LSTM,GRU简单图解:

一篇经典的讲解RNN的&#xff0c;大部分网络图都来源于此&#xff1a;http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 每一层每一时刻的输入输出&#xff1a;https://www.cnblogs.com/lovychen/p/9368390.html 带有权重标识的图&#xff1a;

ecshop模板smarty foreach详解 [ECshop]

{foreach},{foreachelse}{foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组&#xff0c;与仅能访问数字索引数组的{section}不同&#xff0c;{foreach}的语法比 {section}的语法简单得多&#xff0c;但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标…

自己动手,做一款抬头显示的「Todo Hud」

我用过好多款 TodoList 软件&#xff0c;但事情一多总还是丢三落四&#xff0c;原本计划好要做的事情总是安静地躺在某个角落&#xff0c;等我想起来要去扫一眼的时候&#xff0c;都已快「物是人非」。。。 要是能在桌面上实时显示 TodoList&#xff0c;那该多好&#xff01;但…

微软语音扩展全球语言支持,发布160个新声音

导语&#xff1a;全世界有数千种语言&#xff0c;最具语言天赋的人也只能说数十种&#xff0c;普通人能够学会两三种语言已属不易。然而&#xff0c;在科技日新月异的今天&#xff0c;具备自然语言对话能力的AI已经能够掌握上百种语言&#xff0c;扩展人类自身能力&#xff0c;…

P4269 [USACO18FEB]Snow Boots G

思维题。 以地板为序构造链表&#xff0c;再排序&#xff0c;然后删除走不过去的地面。 删除的时候顺便维护最大的跨度&#xff0c;以此判断可行性。 总的来说利用了答案的单调性。 #include <cstdio> #include <cstring> #include <iostream> #include <…

GPT-3:现实版的“贾维斯”?还是真「人工」智能?

整理 | 章雨铭 责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;自2020年推出以来就备受热议&#xff0c;它是一种由OpenAI开发的AI工具。发布的两年来&#xff0c;外媒The Verg…

SVN更换修改用户名

如果装了TortoiseSVN&#xff1a; Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上个用户登录信息&#xff1b;当再次用到svn时&#xff0c;会提示输入用户名密码&#xff0c;输入新的用户名密码即可。 或者&#xff0c;手动删除下面目录下…

启用CORS实现Ajax跨域请求

2019独角兽企业重金招聘Python工程师标准>>> 应用场景&#xff1a;想从a.com请求b.com上的资源&#xff0c;由于同源策略不允许请求。 解决办法&#xff1a;在请求的php文件中加入 header("Access-Control-Allow-Origin: http://b.com"); 这种比较安全&am…

Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1&#xff0e;1 数据科学/机器学习的工作 流程 2 1&#xff0e;1&#xff0e;1 获取 2 1&#xff0e;1&#xff0e;2 检查和探索 2 1&#xff0e;1&#xff0e;3 清理和准备 3 1&#xff0e;1&#xff0e;4 建模…

虚拟机安装CentOS以及SecureCRT设置【完美无错版】

一、CentOS简介CentOS是Linux的发行版之一&#xff0c;它安全、稳定、高效&#xff0c;是我最喜欢的Linux发行版之一。CentOS根据Red Hat Enterprise Linux开放源代码编译而成&#xff0c;与RedHat Linux并没有什么本质上的差别。但Red Hat Enterprise Linux是商业软件&#xf…

Python 实现机器学习前后端页面的交互

作者 | 俊欣来源丨关于数据分析与可视化对于机器学习爱好者而言&#xff0c;很多时候我们需要将建好的模型部署在线上&#xff0c;实现前后端的交互&#xff0c;今天小编就通过Flask以及Streamlit这两个框架实现机器学习模型的前后端交互。模型的建立首先是模型的建立&#xff…