Android Q 模拟器上 Logcat 中的“runtime_flags 中设置的未知位:0x8000”警告
Posted
技术标签:
【中文标题】Android Q 模拟器上 Logcat 中的“runtime_flags 中设置的未知位:0x8000”警告【英文标题】:"Unknown bits set in runtime_flags: 0x8000" warning in Logcat on Android Q emulator 【发布时间】:2019-11-16 21:16:42 【问题描述】:我在 logcat 中的应用程序的第一行收到此警告,但我不知道它指的是什么以及我应该如何修复它。谷歌没有提供太多这方面的信息(事实上,根本没有)。请指教。这可能是关于什么样的旗帜?有没有办法找出指定的位可能指的是什么(或者,也许,在较旧的 android 版本上已经指代,但在 Android 10 中已失效)? Android 9 或更早版本的日志中没有这行。
【问题讨论】:
我将其视为错误,而不是警告,这更令人担忧:E/my.package.name: Unknown bits set in runtime_flags: 0x8000
我非常讨厌这个。我的应用程序会因为我的错误而崩溃,然后我尝试读取日志,但它会清除日志并仅打印“未知位...”
如果您还没有,请考虑分析 > 检查代码
@MarkGavagan:我没有,谢谢你的提示!
【参考方案1】:
不确定这是否对其他人有帮助,但我发现我只在模拟器上遇到这个特殊错误! 所以可能是模拟器的一个错误?♂️。
无论如何,我建议在真实设备上进行测试,因为这是第二次出现此类问题浪费我大量时间进行调查,我将不再信任模拟器,尤其是当他们没有给出明确的错误日志时。
【讨论】:
我现在在真实设备上面临这个错误 E/m.realmjava: Unknown bits set in runtime_flags: 0x8000【参考方案2】:我把一块石头带到大楼里。我追溯错误消息的代码。它位于 C++ 文件dalvik_system_ZygoteHooks.cc 的第 345 行 至少,如果 (runtime_flags! = 0) 则将打印错误消息。 0x8000 也对应于 USE_APP_IMAGE_STARTUP_CACHE 标志(见第 157 行)。对 USE_APP_IMAGE_STARTUP_CACHE 标志的测试在第 340 行完成。通常,runtime_flags 不应再有 USE_APP_IMAGE_STARTUP_CACHE 的引发位,但由于打印了错误,因此似乎不是这种情况。
但最后,错误似乎对应用没有影响。
【讨论】:
我们应该担心这个吗?有没有办法克服它?它似乎甚至在 Android API 29 上也存在...... 我把我的研究推进了一点。如果没有明确的解决方案,我只有一首曲目可以推荐。对“USE_APP_IMAGE_STARTUP_CACHE”的简单搜索将我带到 Zygote.java 模块的第 107 行,其中定义了常量。继续我的研究,我在第 922 行结束了 ART (Android Runtime) (runtime.h)。在这一行是初始化 load_app_image_startup_cache_ 的方法 SetLoadAppImageStartupCacheEnabled。简而言之,该警告似乎与 Android 运行时映像的缓存初始化有关。 我的应用程序在 JSON 文件中从 Web 获取任务列表。然后用户可以每天来回选择它们,应用程序会向他们显示与所选日期相关的任务。当我遇到此错误时,应用程序不会显示与该日期相关的任何内容。如果您忽略并不断更改日期,最终它会再次起作用。【参考方案3】:在我的情况下,至少发生这种情况是因为片段试图更新视图(或类似的东西),而其他活动已经在运行,所以只是
@Override
public void onStop()
super.onStop();
getActivity().finish();
在片段内部解决了这个错误
【讨论】:
至少使用 requireActivity() 更易读,也更 android 风格 你假设 android 有风格......实际上这部分与它由 android studio 添加的解决方案并没有真正的关系。感谢您添加此选项,您可以编辑我认为的答案..【参考方案4】:我搜索了,我有一些建议给你。
首先看看这个链接:
hexadecimal-0x8000
difference between constants 32768 and 0x8000
现在这个链接可能对你有帮助:
Android Fragment no view found for ID
FLAG_ACTIVITY_CLEAR_TOP
addFlags(0x8000)
最后一件事是:
从模拟器中卸载应用并再次运行项目。
第一次编辑:
我再次搜索,我想我们已经接近答案了,所以请检查此链接并说出您的想法?它们无关紧要吗?或者我们走在正确的道路上。
...
AConfiguration
org.robolectric.res.android
A 类配置
ACONFIGURATION_SCREEN_ROUND
public static final int ACONFIGURATION_SCREEN_ROUND
...
\sdk\ndk-bundle\sysroot\usr\include\android
configuration.h
* Bit mask for
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">layout direction</a>
* configuration.
ACONFIGURATION_LAYOUTDIR = 0x4000,
ACONFIGURATION_SCREEN_ROUND = 0x8000
...
https://developer.android.com/ndk/reference/group/configuration
android_ndk_sys
Constant : ACONFIGURATION_SCREEN_ROUND
->
Constant android_ndk_sys::ACONFIGURATION_SCREEN_ROUND
pub const ACONFIGURATION_SCREEN_ROUND: _bindgen_ty_3
->
Type Definition android_ndk_sys::_bindgen_ty_3
type _bindgen_ty_3 = u32;
...
ACAMERA_VENDOR = 0x8000
ACAMERA_VENDOR = 0x8000
ACAMERA_DISTORTION_CORRECTION << 16,
ACAMERA_HEIC_START = ACAMERA_HEIC << 16,
ACAMERA_HEIC_INFO_START = ACAMERA_HEIC_INFO << 16,
ACAMERA_VENDOR_START = ACAMERA_VENDOR << 16
【讨论】:
所以 0x8000 是Intent.FLAG_ACTIVITY_CLEAR_TASK
,很好找。但它没有被弃用,为什么它会是“未知位”? developer.android.com/reference/android/content/…
关于您的编辑,我认为这无关紧要,因为这是我以前从未听说过的一些第 3 方类/软件。以上是关于Android Q 模拟器上 Logcat 中的“runtime_flags 中设置的未知位:0x8000”警告的主要内容,如果未能解决你的问题,请参考以下文章