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”警告的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 开发中使用 logcat 的基础知识

android 怎样实现logcat

如何用好Android Studio的logcat

在 android studio 中使用设备调试时,Android Logcat 为空

Logcat 不会显示 Log.d 消息

eclipse android Logcat 未显示“已保存的过滤器”面板