我在我的Android项目中使用库SQLCipher,这允许我从我的应用程序中访问预加密的SQLite v3数据库。
唯一的缺点是,在创建新的数据库连接(getReadableDatabase()
和getWritableDatabase()
调用)时,当前存在很多开销,因为每次数据库都会发生所有加密打开。这些调用目前显着减慢了我的应用程序。
所以,我正在寻求通过在我的所有活动中保持与数据库的单个活动连接来最小化进行这些调用所需的次数。
onDestroy()
方法都会关闭应用程序与数据库的连接,除非该活动的标志为 true (即,应用程序不是&n被摧毁,我们只是转向另一种活动)public class ExampleActivity extends Activity {
// Used to determine whether we are destroying the activity due to an intent.
private boolean isIntent = false;
public void someMethod() {
isIntent = true;
Intent intent = new Intent(this, SomeOtherActivity.class);
startActivity(intent);
finish();
}
@Override
public void onDestroy() {
super.onDestroy();
if (!isIntent)
// We haven't started another activity, so we should close the open
// database connection.
DatabaseHelper.close();
}
}
这个方法有什么问题我还没考虑过吗?我之前没见过它,所以我很谨慎。
有没有更好的方法来达到预期的效果?
答案 0 :(得分:1)
您可以围绕基于SQLCipher的SQLiteOpenHelper
的子类创建单例类。在SQLiteOpenHelper
内,对getWritableDatabase()
的调用在内部缓存返回的数据库对象,因此每次调用该方法时都不会发生密钥派生。