2023-01-20 443
我借口提出一个非常模糊的问题,但是,我有一个纯粹的本地NDK应用程序,应该以浸入式模式执行(即全屏幕).
当应用程序通过APP_CMD_RESUME恢复应用时,将执行沉浸式模式JNI代码.大多数情况下,这起作用,但是,我的SetImmersiveMode()摘要中时不时地命令activity->vm->DetachCurrentThread()崩溃了,但有一个致命的例外:
FATAL EXCEPTION: Thread-10
Process: com.toppluva.portis.LocalDebug, PID: 5474
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7380)
at android.view.ViewRootImpl.recomputeViewAttributes(ViewRootImpl.java:3478)
at android.view.View.setSystemUiVisibility(View.java:22587)
这确实使我感到困惑,主要是因为它时不时地发生,我该如何检测我是否从这个原始线程执行?
请注意,根据文档APP_CMD_RESUME从主线程执行.
view.setsystemuivisible()应仅从主线程调用. 没有看到您的代码,很难判断distachcurrentthread()是否在此中扮演任何角色.
文档,nativeactivity :: env是应用程序主线程的JNI上下文.
您应该在终止附加到JVM的本机线程之前致电DetachCurrentThread()
您不应该在Java出生的线程上调用DetachCurrentThread),例如UI线程.
请注意,您可以随时随地在任何线程上调用AttachCurrentThread().它等于在Java线程或附带的线程上NOP.
这些连接/分离不像括号那样配对.任何数量的附件呼叫都会通过单个独立式逆转. 推荐练习练习:
使用pthread_key_create来定义destructor函数,该函数将在线程退出之前被调用,然后从那里调用DetachCurrentThread. (使用pthread_setspecific使用该键将JNIENV存储在线程 – 本地存储中;这样,它将被作为参数传递到destructor中.)
请参阅Webrtc如何处理 git web repo .
以上所述是小编给大家介绍的DetachCurrentThread在NDK中有时会崩溃,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26007.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态