diff --git a/app/src/main/assets/print_demo.html b/app/src/main/assets/print_demo.html index 24a48fd..39016e4 100644 --- a/app/src/main/assets/print_demo.html +++ b/app/src/main/assets/print_demo.html @@ -503,22 +503,23 @@ showPttResult("[回调] " + msg); }; - // ES6 特性测试函数 + // ES6 特性测试函数(通过 eval 避免阻塞旧版 JS 引擎整体解析) function testES6Features() { try { - const arr = [1, 2, 3]; - const [a, ...rest] = arr; - let sum = rest.reduce((acc, val) => acc + val, 0); - const myMap = new Map(); - myMap.set('key', `Sum is ${sum}`); - - new Promise((resolve) => { - setTimeout(() => resolve(myMap.get('key')), 100); - }).then(res => { - alert(`ES6 引擎测试成功!\n解构: a=${a}\nPromise/Map 返回: ${res}`); - }); + eval("\ + const arr = [1, 2, 3];\ + const [a, ...rest] = arr;\ + let sum = rest.reduce((acc, val) => acc + val, 0);\ + const myMap = new Map();\ + myMap.set('key', `Sum is ${sum}`);\ + new Promise((resolve) => {\ + setTimeout(() => resolve(myMap.get('key')), 100);\ + }).then(res => {\ + alert(`ES6 引擎测试成功!\\n解构: a=${a}\\nPromise/Map 返回: ${res}`);\ + });\ + "); } catch(e) { - alert("ES6 测试失败: " + e.message); + alert("ES6 测试失败 (当前环境可能不支持): " + e.message); } } function addExitText() { diff --git a/app/src/main/java/com/stand/standapp/utils/AppKiller.kt b/app/src/main/java/com/stand/standapp/utils/AppKiller.kt index 305af7a..1098190 100644 --- a/app/src/main/java/com/stand/standapp/utils/AppKiller.kt +++ b/app/src/main/java/com/stand/standapp/utils/AppKiller.kt @@ -5,7 +5,12 @@ import timber.log.Timber object AppKiller { + private var isKilling = false + fun killApp(context: Context, isCrash: Boolean = false) { + if (isKilling) return + isKilling = true + Timber.tag("AppKiller").i("Starting app cleanup. isCrash: $isCrash") try { @@ -30,12 +35,6 @@ object AppKiller { Timber.tag("AppKiller").e(e, "Printer close failed") } - try { - LogManager.shutdown() - } catch (e: Exception) { - // ignore - } - Timber.tag("AppKiller").i("Cleanup finished. Killing process.") if (!isCrash) { @@ -44,6 +43,12 @@ object AppKiller { } catch (e: Exception) {} } + try { + // LogManager.shutdown() 会关闭其内部的线程池 + // 调用后绝对不能再使用 Timber 打印日志,否则会抛出 RejectedExecutionException 导致死循环 + LogManager.shutdown() + } catch (e: Exception) {} + android.os.Process.killProcess(android.os.Process.myPid()) }