为什么有些用户在database.close上获得FC?

问题描述

| 我有以下代码
public class DbAdapter {
...
    public DbAdapter open() throws sqlException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }
...
这个关闭方法在MainActivity的onDestroy上调用
@Override
protected void onDestroy() {
  super.onDestroy();

  mDbHelper.close();
}
我的用户收到以下错误日志:
device_model:bravo
build_version:1.6.17
condition:1
processName:spb.bridges
pid:23493
uid:10057
tag:null
shortMsg:android.database.sqlite.sqliteException
longMsg:android.database.sqlite.sqliteException: unable to close due to unfinalised statements
stackTrace:java.lang.RuntimeException: Unable to destroy activity {my.package/my.package.MainActivity}: android.database.sqlite.sqliteException: unable to close due to unfinalised statements
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2680)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2698)
at android.app.ActivityThread.handlerelaunchActivity(ActivityThread.java:2814)
at android.app.ActivityThread.access$1600(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3694)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.sqliteException: unable to close due to unfinalised statements
at android.database.sqlite.sqliteDatabase.dbclose(Native Method)
at android.database.sqlite.sqliteDatabase.onAllReferencesReleased(sqliteDatabase.java:323)
at android.database.sqlite.sqliteDatabase.close(sqliteDatabase.java:884)
at android.database.sqlite.sqliteOpenHelper.close(sqliteOpenHelper.java:220)
at spb.bridges.DbAdapter.close(DbAdapter.java:177)
at spb.bridges.MainActivity.onDestroy(MainActivity.java:159)
我的代码有什么问题?     

解决方法

        他们有可能在应用程序执行数据库操作时尝试关闭该应用程序。最简单的方法是在该“ 3”语句周围进行try / catch / log。     ,        不保证OnDestroy()可以运行。如果说用户正在使用任务杀手,则它可能会sudo kill -9并停止运行。 SO上的其他人也曾说过,甚至Android也不会称呼它。它应该在android杀死它以释放内存之前被调用。 最好将逻辑放在OnPause()中关闭,然后再次在OnResume()中初始化。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...