如何解决为什么有些用户在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()中初始化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。