现在我遇到了 Android 不支持的库的问题。事实上它不支持这个 API:“java.lang.management”。Eclipse 向我显示了这个错误:
10-25 17:53:03.460:java.lang.NoClassDefFoundError:java.lang.management.ManagementFactory。
我想知道如何添加这个 API 以让我的 android 应用程序支持。
请提供任何帮助。
该 API 不是 Android 的一部分,并且与 Android 不兼容。
该java.lang.management
API 用于管理和监视 Java VM。Android 的 Dalvik VM 不是 Java VM。
似乎在 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 获得统计信息。