java.io.FileNotFoundException: com/google/inject/internal/util/$Finalizer.class при запуске приложения для Android
Я разрабатываю приложение для Android.
В приложении вы можете добавить или удалить столько отсчетов, сколько хотите.
Все отсчеты сохраняются в ArrayList. Я не могу просто сохранить их в базе данных или в общих настройках, потому что отсчет времени должен продолжаться, даже если вы выходите из приложения.
Я использую roboguice 2.0 и guice-3.0-no_aop.jar для обработки инъекций зависимостей.
В большинстве случаев все работает нормально, но иногда, когда я запускаю приложение, я получаю только следующее предупреждение, и все переменные, такие как Arraylist, где я сохранил обратные отсчеты, снова становятся пустыми.
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): Could not load Finalizer in its own class loader. Loading Finalizer in the current class loader instead. As a result, you will not be able to garbage collect this class loader. To support reclaiming this class loader, either resolve the underlying issue, or move Google Collections to your system class path.
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): java.io.FileNotFoundException: com/google/inject/internal/util/$Finalizer.class
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$FinalizableReferenceQueue$DecoupledLoader.getBaseUrl(FinalizableReferenceQueue.java:269)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$FinalizableReferenceQueue$DecoupledLoader.loadFinalizer(FinalizableReferenceQueue.java:253)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$FinalizableReferenceQueue.loadFinalizer(FinalizableReferenceQueue.java:175)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$FinalizableReferenceQueue.<clinit>(FinalizableReferenceQueue.java:100)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$MapMaker$QueueHolder.<clinit>(MapMaker.java:787)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$MapMaker$WeakEntry.<init>(MapMaker.java:946)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$MapMaker$Strength$1.newEntry(MapMaker.java:312)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$MapMaker$StrategyImpl.newEntry(MapMaker.java:498)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$MapMaker$StrategyImpl.newEntry(MapMaker.java:419)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2029)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.Annotations$AnnotationChecker.hasAnnotations(Annotations.java:116)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.Annotations.isBindingAnnotation(Annotations.java:180)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.Key.ensureIsBindingAnnotation(Key.java:366)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.Key.strategyFor(Key.java:338)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.Key.get(Key.java:272)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.AbstractBindingBuilder.annotatedWithInternal(AbstractBindingBuilder.java:82)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.internal.ConstantBindingBuilderImpl.annotatedWith(ConstantBindingBuilderImpl.java:49)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at roboguice.config.DefaultRoboModule.configure(DefaultRoboModule.java:121)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.spi.Elements.getElements(Elements.java:101)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.google.inject.spi.Elements.getElements(Elements.java:78)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at roboguice.RoboGuice.setBaseApplicationInjector(RoboGuice.java:81)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at roboguice.RoboGuice.setBaseApplicationInjector(RoboGuice.java:137)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at roboguice.RoboGuice.getBaseApplicationInjector(RoboGuice.java:57)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at roboguice.RoboGuice.getInjector(RoboGuice.java:147)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at roboguice.activity.RoboFragmentActivity.onCreate(RoboFragmentActivity.java:50)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at de.neosit.grafzahl.MainActivity.onCreate(MainActivity.java:38)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.Activity.performCreate(Activity.java:4637)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1051)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.ActivityThread.access$600(ActivityThread.java:127)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.os.Handler.dispatchMessage(Handler.java:99)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.os.Looper.loop(Looper.java:137)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at android.app.ActivityThread.main(ActivityThread.java:4499)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at java.lang.reflect.Method.invokeNative(Native Method)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at java.lang.reflect.Method.invoke(Method.java:511)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
05-21 13:07:33.260: W/nalizableReferenceQueue(14417): at dalvik.system.NativeStart.main(Native Method)
Я не могу понять, что является причиной этой проблемы. Я читал, что у кого-то была такая же проблема, но общее мнение заключалось в том, что это всего лишь предупреждение, и его можно игнорировать. Так что, возможно, что-то еще вызывает сброс переменных.
Я надеюсь, что вы можете мне помочь. Заранее спасибо.
3 ответа
В андроид студии я поменял зависимости build.gradle.
dependencies {
...
compile 'com.google.inject:guice:4.0-beta:no_aop'
compile 'org.roboguice:roboguice:2.0'
}
Это похоже на проблему с руководством 3.0 no_aop. Я обновился до версии 4.0 (бета) no_aop, и проблема исчезла.
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.0-beta</version>
<classifier>no_aop</classifier>
</dependency>
вам также нужно добавить исключение к исходной зависимости roboguice:
<dependency>
<groupId>org.roboguice</groupId>
<artifactId>roboguice</artifactId>
<version>2.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</exclusion>
</exclusions>
</dependency>
Согласно этой проблеме, проблема является поверхностной. Он предлагает несколько круговых кроличьих отверстий, чтобы объяснить это, я сдался после первых нескольких. Суть в том, что он не может быть должным образом собран мусором и что если вы "делаете что-то напуганное, загрузчик классов", вы можете столкнуться с проблемами.
Для меня, обновление до Guice 4.0-бета ввел ошибку, касающуюся com.google.inject.utils.$ImmutableList
, что более проблематично, чем поверхностная проблема финализатора.