【发布时间】:2020-06-02 07:51:19
【问题描述】:
我在我的 Android 应用程序中使用 SQLite3 从蓝牙 LE 存储数据。使用 SQLite 时有两种情况:
- 首先当我扫描后检查蓝牙 LE 设备之前已经连接过。我打开连接,读取或保存数据,关闭连接没有问题。然后在设备资源管理器中,我只看到一个带有 .db 扩展名的文件,其中数据被正确存储。例如,我可以使用某些查看器阅读此文件:sqliteonline.com
- 第二我在后台运行的服务中打开连接。尽管应用程序或活动不可见(我需要此功能),但该应用程序可以从 BLE 记录和存储数据。但是当系统终止服务或我从启动器终止应用程序时,连接不会关闭,并且可能会存储最后保存的数据的下两个文件(.db-wal 和 .db-shm)。我可以在 .db 文件中看到最后存储的数据,而其他文件无法为我打开和读取。该应用可以读取最后存储的数据(也可以从 .db-wal 和 .db-shm 文件中读取)。
我的问题是:这是正确的解决方案吗?是否可以让连接打开?例如,我不会删除某些系统清理程序最后存储的数据。另外,我想在应用程序开发期间查看我的所有数据。我在服务中调用 onDestroy 方法中的关闭连接,但我读到不建议发布。
@Override
public void onDestroy() {
if(writableTestbedDb != null){
writableTestbedDb.close();
}
if(testbedDbHelper != null) {
testbedDbHelper.close();
}
Log.w(TAG, "SERVICE DESTROYED");
this.stopSelf();
super.onDestroy();
}
我使用单例设计模式进行数据库连接。
public static TestbedDbHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new TestbedDbHelper(context.getApplicationContext());
}
mInstance.setWriteAheadLoggingEnabled(false);
return mInstance;
}
【问题讨论】:
标签: android sqlite android-studio android-sqlite android-service