全部产品

Android 常见问题

更新时间:2020-11-09 15:39:40

自定义 JSAPI 时,interceptEventhandleEvent 有什么区别?

解答:如果要监听容器的其他事件,需要将自定义 JSAPI 添加到 interceptEvent 中;如果是需要自己处理的事件,需要将自定义 JSAPI 添加写在 handleEvent 里,并返回 true 。返回 true,事件将停止传递;返回 false,事件将继续传递给其他插件。

自定义 JSAPI 时,已经在 config.setEvents("event"); 添加了事件,为什么还要在插件的onPrepare 里添加一次事件?

解答:因为容器的插件是懒加载的,即在页面创建的时候加载。通过外部的 config.setEvents 来注入要监听的事件名称,当真正有 JS 调用的时候,才会去实例化对应的插件对象。真正实例化的插件的事件分发用的是插件内 onPrepare 的事件。所以,要确保 config.setEvents("event") 的事件和内部 onPrepare 的事件保持一致。

自定义 JSAPI 插件注册的 page、session、service 三者有什么区别?

解答:page 对应一个 webview。session 对应 mPaaS 应用的一个 App 对象。service 是全局的一个单例。

  • 如果注册为 page 级别,每次创建 WebView 都会创建一个插件实例,对应的插件的 onRelease 在 WebView 销毁时回调。
  • 如果注册为 session 级别,每次创建一个 App 对象都会创建一个插件。
  • 如果注册为 service 级别,全局只创建一次插件,在第一次打开容器的时候创建。

验签是验证离线包的来源吗?还是会做完整性校验?

解答:在离线包发布平台,如果您配置了签名私钥,平台下发的 amr 文件就会带上离线包的签名信息(通过私钥对离线包的 hash 值加密后得到的密文)。验签的时候会使用在项目中预置的公钥进行签名的验证(解密上一步的密文得到 hash 值,本地计算离线包的 hash,判断两者是否相同)。
该过程保证了即保证了离线包的内容完整,也保证了离线包的来源正确。

打开离线包ProgressBar无法隐藏?

解答:这种情况可能是由于资源离线失败,页面 fallback 到了线上模式,在 fallback 模式下面 H5 容器强制限制 ProgressBar,无法通过设置 SHOW_PROGRESS启动参数来隐藏页面加载进度条(Progress Bar)。