uni-app Android工控机中重新加载触控驱动时会导致app重启

uni-app Android工控机中重新加载触控驱动时会导致app重启 产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win11
HBuilderX类型:正式
HBuilderX版本号:3.99
手机系统:Android
手机系统版本号:Android 11
手机厂商:工控机
手机机型:全志A133
页面类型:nvue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX

示例代码:

rmmod /system/vendor/modules/gt9xxf_ts.ko  
insmod /system/vendor/modules/gt9xxf_ts.ko

操作步骤:

通过adb连接到设备,使用下面命令重启触控驱动

  1. 卸载驱动 rmmod /system/vendor/modules/gt9xxf_ts.ko
  2. 加载驱动 insmod /system/vendor/modules/gt9xxf_ts.ko

在输入上面的命令时,uniapp开发的应用会重新启动,其他原生应用只会刷新当前页面

预期结果:

类似原生应用只刷新当前页面或者不刷新(最好),而不是重启应用,对客户无感

实际结果:

每次输入命令重启驱动都会重启应用,对客户有感


更多关于uni-app Android工控机中重新加载触控驱动时会导致app重启的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

从日志来看:
卸载gt9xxf_ts这个驱动, 相当于插拔设备’/dev/input/event2", 会导致你的app进程com.xt.wxcw被切到后台并被终止.
猜测是你用命令直接卸载驱动, 会导致系统热插拔锁的程序异常.
然后CPU降频, WEEX异常, 导致uni重启了APP.
简单来说, 你这个命令太粗暴了, 没有兼容系统底层.
然后UNI的WEEX又不给力, 一碰就倒. 遇到问题就重启.

更多关于uni-app Android工控机中重新加载触控驱动时会导致app重启的实战教程也可以访问 https://www.itying.com/category-93-b0.html


建议你不要等官方了, 他们各种bug都修不完, 肯定没空搞你这个.
能自救就自救, 不能就换方案.

在 uni-app 中,如果在 Android 工控机上重新加载触控驱动时导致应用重启,可能是由于以下原因之一:

1. 系统资源管理机制

  • Android 系统在重新加载驱动或进行某些硬件操作时,可能会释放或重新分配系统资源,导致应用被系统强制终止并重启。
  • 这种情况通常发生在系统资源紧张或底层驱动操作对系统影响较大的情况下。

2. 触控驱动的影响

  • 重新加载触控驱动可能会导致输入设备的状态发生变化,系统可能会认为当前应用环境不稳定,从而强制重启应用以确保稳定性。

3. uni-app 框架的限制

  • uni-app 是基于 Vue.js 的跨平台开发框架,其底层依赖于原生平台的实现。如果在 Android 工控机上进行底层操作(如重新加载驱动),可能会触发原生平台的某些机制,导致应用重启。

4. 工控机的特殊环境

  • 工控机的 Android 系统通常是定制化的,可能对底层驱动和系统行为进行了修改。这些定制化行为可能会导致与标准 Android 设备不同的表现。

解决方法

1. 优化触控驱动加载

  • 与硬件供应商或驱动开发人员沟通,优化触控驱动的加载逻辑,尽量减少对系统资源的占用和对应用环境的影响。

2. 捕获系统事件

  • 在 uni-app 中,监听 Android 系统的 onPauseonResume 等生命周期事件,尝试在应用重启时恢复应用状态。
  • 使用 uni.onAppShowuni.onAppHide 监听应用的前后台切换。

3. 避免频繁加载驱动

  • 如果可能,避免在应用运行过程中频繁加载或重新加载触控驱动,可以将驱动加载操作放在应用启动时进行。

4. 定制化系统

  • 如果是工控机定制化系统的问题,可以与设备供应商沟通,修改系统行为,避免在驱动加载时强制重启应用。

5. 日志分析

  • 通过 adb logcat 抓取系统日志,分析应用重启的原因,定位是系统行为还是应用本身的问题。

6. 使用原生开发

  • 如果 uni-app 无法满足需求,可以考虑使用原生 Android 开发,直接控制驱动加载和应用生命周期。

示例代码:监听应用生命周期

// uni-app 中监听应用生命周期
uni.onAppShow(() => {
  console.log('App is shown');
  // 恢复应用状态
});

uni.onAppHide(() => {
  console.log('App is hidden');
  // 保存应用状态
});

// Android 生命周期监听
if (plus.android) {
  const mainActivity = plus.android.runtimeMainActivity();
  mainActivity.onPause = () => {
    console.log('App is paused');
  };
  mainActivity.onResume = () => {
    console.log('App is resumed');
  };
}
回到顶部