我正在开发一个拥有sqlite数据库的android应用程序。在我的应用程序中编写与数据库操作相关的代码后,我得到了以下异常。虽然我的应用程序没有停止/崩溃,但我想知道如何解决此异常。我不确定为什么会发生这种异常,但我认为它与sqlite操作有关。我按照建议关闭了所有流,连接和游标。下面是堆栈跟踪:
689-698/? E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:57)
at android.os.Binder.execTransact(Binder.java:446)
04-24 08:49:21.127 689-698/? E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:64)
at android.os.Binder.execTransact(Binder.java:446)
04-24 08:49:21.129 689-698/? E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:71)
at android.os.Binder.execTransact(Binder.java:446)
有人可以解释这个例外何时发生以及如何解决?
答案 0 :(得分:1)
就像日志所说:
在附加的堆栈跟踪中获取资源但从未发布。有关避免资源泄漏的信息,请参阅java.io.Closeable。
显式终止方法&#39;关闭&#39;没有叫
请注意,callstack显示资源创建的位置。当资源被垃圾收集时会打印该消息,并且它注意到它没有被关闭。
在您的情况下,我们可以看到资源是last column
,它是由ParcelFileDescriptor
方法自动创建的(即,当您的BackupAgent通过活页夹进行呼叫时)。
如果确保关闭传递给BackupAgent子类的ParcelFileDescriptors,则日志应该消失。