uni-app 【报Bug】plus.device.getOAID 导致 plus.nativeUI.previewImage 安卓黑屏
uni-app 【报Bug】plus.device.getOAID 导致 plus.nativeUI.previewImage 安卓黑屏
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| HBuilderX | 3.2.15 | 云端 |
APP 启动后 执行两次或以上 plus.device.getOAID plus.nativeUI.previewImage 会出现黑屏,放置几分钟图片又能自己出来。
可复现代码
<!DOCTYPE html>
<html>
<script src="js/mui.min.js"></script>
<script>
mui.init();
mui.plusReady(function ()
{
// 调用 OAID 超过 1 次(两次或以上)
for (var i=0; i<2; i++) {
plus.device.getOAID({
success: function(e) {
console.log(e.oaid);
}
});
}
// 预览图片就会黑屏
plus.nativeUI.previewImage([
"http://img-cdn-qiniu.dcloud.net.cn/newpage/images/logo4.png"
]);
})
</script>
</html>
更多关于uni-app 【报Bug】plus.device.getOAID 导致 plus.nativeUI.previewImage 安卓黑屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 【报Bug】plus.device.getOAID 导致 plus.nativeUI.previewImage 安卓黑屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的异步任务冲突问题。plus.device.getOAID() 在安卓平台会启动一个独立的 WebView 子线程来获取设备标识,而 plus.nativeUI.previewImage() 同样依赖原生图片组件。当短时间内连续调用 getOAID() 时,其创建的线程可能尚未完全释放,与后续 previewImage() 的原生窗口渲染产生资源竞争,导致图片容器渲染异常(黑屏)。一段时间后系统自动回收冲突资源,图片得以显示。
临时解决方案:
- 避免重复调用:应用启动后仅获取一次 OAID 并缓存,切勿在循环或短时间内多次调用。
- 增加延迟:在
getOAID()调用后,使用setTimeout延迟至少 500ms 再执行previewImage()。 - 使用条件规避:在需要预览图片的页面或逻辑中,跳过 OAID 的重复获取。
修改示例:
let oaidCache = null;
mui.plusReady(function() {
// 仅获取一次 OAID
if (!oaidCache) {
plus.device.getOAID({
success: function(e) {
oaidCache = e.oaid;
console.log('OAID cached:', oaidCache);
}
});
}
// 延迟预览图片
setTimeout(() => {
plus.nativeUI.previewImage([
"http://img-cdn-qiniu.dcloud.net.cn/newpage/images/logo4.png"
]);
}, 600);
});

