Android 常见问题

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

解答:如果您要监听容器的其他事件,写在 interceptEvent 里;如果事件只是您自己处理的,写在 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,判断两者是否相同)。

该过程保证了既保证了离线包的内容完整,也保证了离线包的来源正确。

打开离线包时进度条无法隐藏?

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