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

Android разгружает классы автоматически после определенных периодов? Что я могу сделать, когда мой класс разгружен?

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

Проблема происходит главным образом по моему телефону HTC Magic рабочий Android 1.6.

7
задан tshepang 15 May 2014 в 11:47
поделиться

2 ответа

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

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

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

.
8
ответ дан 7 December 2019 в 01:19
поделиться

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

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

Также:

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

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

2
ответ дан 7 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: