Đây là một vấn đề rất lạ. Ứng dụng của tôi mà chỉ chạy tốt nhưng bằng cách nào đó nếu tôi rời khỏi điện thoại của tôi cho một hay hai giờ trong khi ứng dụng của tôi đang chạy, tôi nhận được lỗi sau khi tôi trở lại với nó sau này:Android: Khi nào các lớp học được hệ thống tải xuống?
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)
Tôi biết một thực tế rằng lớp yoga.database.Manager của tôi đã được tải vào thời điểm khi ứng dụng được khởi chạy, nhưng bằng cách nào đó lớp học phải được hệ thống tải xuống khi tôi rời khỏi điện thoại.
Android có tự động hủy lớp sau một số khoảng thời gian nhất định không? Tôi có thể làm gì khi lớp học của tôi bị bốc dỡ?
Lỗi trên khiến ứng dụng của tôi gặp sự cố, nhưng tôi có thể dễ dàng khởi chạy lại ứng dụng và nó chạy tốt.
Sự cố xảy ra chủ yếu trên điện thoại HTC Magic chạy Android 1.6 của tôi.
Cảm ơn bạn đã nhập! Tôi sẽ nhìn vào logcat. – user277827
@fadden, Bạn có một nguồn/trích dẫn cho * "Dalvik VM hiện không dỡ lớp. Nếu nó đã làm, nó sẽ chỉ có thể làm như vậy khi tất cả các lớp liên kết với một bộ nạp lớp cụ thể có thể được dỡ cùng một lúc" *? – Pacerier
Đối với phần đầu tiên, tôi là nguồn - tôi thường chịu trách nhiệm về thời gian chạy Dalvik vào thời điểm đó (và tiếp tục cho đến đầu năm 2011, ngay trước khi phát triển trong thời gian chạy về cơ bản dừng lại để tập trung vào những gì bây giờ là ART). Phần thứ hai chỉ là cách trình nạp lớp hoạt động. Đối với một lớp được dỡ xuống, không có tham chiếu đến nó, nhưng mỗi lớp được tham chiếu bởi trình nạp lớp và mọi lớp đều tham chiếu đến trình nạp của nó. Vì vậy, cho đến khi một trình nạp và tất cả các lớp mà nó tải không thể truy cập được, GC sẽ không loại bỏ chúng. Tôi không có một tài liệu tham khảo có thẩm quyền để trích dẫn cho điều đó. – fadden