app重启了之后,这个实例mWXSDKInstance的地址就变了,变成了新的实例,但是前端调用的函数指向的实例是旧的,导致调用函数没有反应,

​I/hwschromium-3151: [INFO:gesture_detector.cc(630)] Stop drag long press timer.​​点击按钮调用函数也没有反应。

这个bug不是那么好复现的,我发现是重启app了才会出现这个情况(plus.runtime.restart()),app重启了之后,实例指向的地址也发生了改变,所以导致新的实例没有办法获取到原来实例的一些状态或者数据,也就导致了app某些功能会失效,例如音频播放插件使用不正常等等…

因此,如果是在退出登录等功能,退出app之类的,不要去使用plus.runtime.restart(),这会销毁app的生命周期,导致app有一个新的mWXSDKInstance。

因此,我使用的是:

​uni.reLaunch({ url: '../login/login' });​

直接跳转到页面,并处于栈顶,并且只存在它自己一个页面。

当然,如果在这个login页面又手动退出了呢?这个时候app退出应用了,再点进来也是相当于重启,这时候就要在onBackPress做好判断,防止真正退出app,导致app实例不再如初,而是隐藏app到后台:

onBackPress() {
//销毁app
let main = plus.android.runtimeMainActivity();
//为了防止快速点按返回键导致程序退出重写quit方法改为隐藏至后台
plus.runtime.quit = function() {
main.moveTaskToBack(false);
};
}