解析android中的java.lang.Throwable异常

时间:2015-04-25 05:33:35

标签: java android sqlite

我正在开发一个拥有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)

有人可以解释这个例外何时发生以及如何解决?

1 个答案:

答案 0 :(得分:1)

就像日志所说:

  

在附加的堆栈跟踪中获取资源但从未发布。有关避免资源泄漏的信息,请参阅java.io.Closeable。

     

显式终止方法&#39;关闭&#39;没有叫

请注意,callstack显示资源创建的位置。当资源被垃圾收集时会打印该消息,并且它注意到它没有被关闭。

在您的情况下,我们可以看到资源是last column,它是由ParcelFileDescriptor方法自动创建的(即,当您的BackupAgent通过活页夹进行呼叫时)。

如果确保关闭传递给BackupAgent子类的ParcelFileDescriptors,则日志应该消失。