Это - очень странная проблема. Мое приложение, которое работает очень хорошо, но так или иначе если я оставляю свой телефон в течение часа или два, в то время как мое приложение работает, я получаю следующую ошибку, когда я возвращаюсь к нему позже:
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. Класс менеджера был загружен в то время, когда приложение было запущено, но так или иначе класс, должно быть, был разгружен системой, когда я оставил телефон.
Android разгружает классы автоматически после определенных периодов? Что я могу сделать, когда мой класс разгружен?
Вышеупомянутая ошибка заставляет мое приложение отказывать, но я могу легко повторно запустить его, и это работает очень хорошо.
Проблема происходит главным образом по моему телефону HTC Magic рабочий Android 1.6.
В настоящее время Dalvik VM не выгружает классы. Если бы она это делала, она могла бы это делать только тогда, когда все классы, связанные с определенным загрузчиком классов, могут быть выгружены одновременно, чего не произойдет во время работы вашего приложения.
Вам необходимо проверить вывод logcat на наличие ошибок, приведших к этому исключению. Один из способов получить ошибку NoClassDefFoundError - это сбой во время инициализации рассматриваемого класса; если бы это произошло, в журнале, скорее всего, был бы след.
(Конечно, к этому моменту вывод logcat, вероятно, уже давно исчез, но если проблема повторяется, вы захотите зафиксировать ее в следующий раз)
.Вы играете в игры с пользовательскими загрузчиками классов?
Я спрашиваю, потому что если yoga.YogaActivity
и yoga.database.Manager
являются стандартными классами Java в одном и том же APK-файле Android, у вас не должно быть так, чтобы один был в памяти, а другой нет. Я никогда не видел, чтобы Android выгружал классы по отдельности - по крайней мере, я никогда не сталкивался с этой конкретной проблемой.
Также:
Я оставляю свой телефон на час или два. пока работает мое приложение
Возможно, вам стоит уточнить, что вы имеете в виду. Вы имеете в виду, что оставляете свою деятельность на переднем плане? Вы имеете в виду, что вы нажимаете HOME, а затем возвращаетесь к ней спустя несколько часов? Вы имеете в виду что-то другое?