公司项目有一个为 PDA 设备开发的生产扫码系统,前一阵子跟我反映在唤起相机的时候软件有概率闪退重启。
具体现象就是在软件内选择拍照上传图片、调用chooseImage API,拍照后,相机关闭后应用会闪退。排查了一阵子后发现原因:
PDA为霍尼韦尔设备,硬件配置较低,内存仅 2G ,运行uniapp程序后,再唤醒相机拍摄,会内存不足,安卓机制就会将已置于后台的应用杀死,以保证相机正常运行。(相机本身非常占用内存)
解决方案: 由于是PDA设备,工厂使用,所以直接简单粗暴的提升APP的优先级就可以:
在App.vue 页面直接写保活就可以,用了两种,理论上来说保留第2种即可
onLaunch: function() {
// 保活功能相关
// 1. 后台持续定位
setInterval((res) => {
uni.getLocation({
type: 'wgs84',
success: function(res) {
}
});
}, 5000);
// 2.设置全局悬浮窗,提升进程优先级
let screenWidth = 0
let screenHeight = 0
uni.getSystemInfo({
success: (res) => {
screenWidth = res.windowWidth; // 屏幕宽度,单位为px
screenHeight = res.windowHeight; // 屏幕高度,单位为px
console.log('屏幕宽度:', screenWidth);
console.log('屏幕高度:', screenHeight);
},
});
systemalert.show({
text: "HIAS",
textColor: "rgba(10,10,10,0)",
fontSize: "3",
backgroundColor: "rgba(10,10,10,0)",
paddingLeft: 0,
paddingRight: 0,
paddingTop: 0,
paddingBottom: 0,
x: screenWidth * 2 - 50,
y: screenHeight * 2,
radius: 0
});
},