Android:什么时候类被系统卸载?

这是一个非常奇怪的问题。 我的应用程序运行得很好,但不知怎么的,如果我的应用程序正在运行的时候,让我的手机停留一两个小时,稍后再回来时会出现以下错误:

java.lang.NoClassDefFoundError: yoga.database.Manager at yoga.YogaActivity.openDatabase(YogaActivity.java:294) at yoga.YogaActivity.initData(YogaActivity.java:275) at yoga.YogaActivity.onCreate(YogaActivity.java:102) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) at android.app.ActivityThread.access$2100(ActivityThread.java:116) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4203) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) at dalvik.system.NativeStart.main(Native Method) 

我知道我的yoga.database.Manager是在应用程序启动的时候加载的,但是在我离开电话的时候,该类必须已经被系统卸载了。

Android会在一段时间后自动卸载类吗? class级卸载时我能做些什么?

上述错误导致我的应用程序崩溃,但我可以轻松地重新启动它,它运行得很好。

问题主要发生在运行Android 1.6的HTC Magic手机上。

Solutions Collecting From Web of "Android:什么时候类被系统卸载?"

Dalvik虚拟机目前不能卸载类。 如果这样做了,那么只有当所有与特定类加载器相关的类都可以一次性卸载时才能这样做,而在您的应用程序运行时不会出现这种情况。

您需要检查logcat输出中是否有导致该exception的错误。 获得NoClassDefFoundError的一种方法是在有问题的类的初始化期间失败。 如果发生这种情况可能会在日志中有一个痕迹。

(当然,现在logcat输出可能已经过去了,但是如果问题是可重复的,那么下一次你就需要捕获它。)

你用自定义类加载器玩游戏吗?

我问,因为如果yoga.YogaActivityyoga.database.Manager是在同一个Android APK文件中的标准Java类,你不应该有一个在内存中,而另一个不是。 我从来没有见过Android在一次性的基础上卸载类 – 至less我从来没有遇到过这个特殊的问题。

也:

当我的应用程序运行时,我将手机放置一两个小时

你可能想澄清你的意思。 你的意思是你把你的活动放在前台吗? 你的意思是你按HOME,然后几小时后回来? 你的意思是别的吗?