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 классы автоматически после определенных периодов? Что я могу сделать, когда мой класс будет выгружен?

Приведенная выше ошибка приводит к сбою моего приложения, но я могу легко перезапустить его, и он работает отлично.

Проблема возникает в основном на моем телефоне HTC Magic под управлением Android 1.6.

Solutions Collecting From Web of "Android: Когда классы разгружаются системой?"

В настоящее время Dalvik VM не разгружает классы. Если бы это было так, то это было бы возможно только тогда, когда все классы, связанные с конкретным загрузчиком классов, могли быть сразу выгружены, что не будет иметь место во время работы вашего приложения.

Вам нужно проверить вывод logcat для ошибок, ведущих к этому исключению. Один из способов получить NoClassDefFoundError – это то, что не удалось выполнить во время инициализации рассматриваемого класса; Если это произошло, вероятно, в журнале будет след.

(Конечно, к настоящему времени вывод logcat, вероятно, давно ушел, но если проблема повторяется, вы захотите ее захватить в следующий раз.)

Вы играете в игры с пользовательскими загрузчиками классов?

Я спрашиваю, потому что если yoga.YogaActivity и yoga.database.Manager являются стандартными Java-классами в одном файле APK Android, у вас не должно быть одного в памяти, а другое нет. Я никогда не видел Android разгружать классы на разовой основе – в наименьшей степени, я никогда не сталкивался с этой конкретной проблемой раньше.

Также:

Я оставляю свой телефон на час или два, пока мое приложение работает

Вы можете уточнить, что вы подразумеваете под этим. Вы имеете в виду, что вы оставляете свою деятельность на переднем плане? Вы имеете в виду, что вы нажимаете HOME, а затем возвращаетесь к нему через несколько часов? Вы имеете в виду что-то еще?