3

现在我遇到了 Android 不支持的库的问题。事实上它不支持这个 API:“java.lang.management”。Eclipse 向我显示了这个错误:

10-25 17:53:03.460:java.lang.NoClassDefFoundError:java.lang.management.ManagementFactory。

我想知道如何添加这个 API 以让我的 android 应用程序支持。

请提供任何帮助。

4

2 回答 2

7

该 API 不是 Android 的一部分,并且与 Android 不兼容。

java.lang.managementAPI 用于管理和监视 Java VM。Android 的 Dalvik VM 不是 Java VM。

于 2013-10-25T17:20:29.693 回答
2

似乎在 Android 版本 23 中,情况略有改善。例如,我找到了一个替代品:

GarbageCollectorMXBean gb = ....
long gctime = gb.getCollectionTime();

感谢@Jacob,我现在正在使用此代码。首先,该getRuntimeStat()方法并非在所有 android 版本中都可用。所以我先做一些反思:

static {
  try {
      Class<?> debugClass = Debug.class;
      getRuntimeStat = debugClass.getDeclaredMethod(
           "getRuntimeStat", String.class);
  } catch (NoSuchMethodException x) {
      getRuntimeStat = null;
  }
}

检索 GC 时间只需调用方法句柄,并使用正确的属性名称。我目前正在使用此属性名称:

String gctimestr;
try {
    gctimestr = (String) (getRuntimeStat != null ? 
         getRuntimeStat.invoke(null, "art.gc.gc-time") : null);
} catch (IllegalAccessException e) {
    gctimestr = null;
} catch (InvocationTargetException e) {
    gctimestr = null;
}

然后gctimestr可以将其转换为长值,如果它非空。另一方面,如果它为 null,则无法通过此 API 获得统计信息。

于 2018-02-11T01:07:57.133 回答