在我的Android应用程序中,我使用SQLiteOpenHelper来实现ContentProvider.查询,添加,删除操作都是通过ContentProvider完成的.
但是在我的一部Android手机(htc g13)中,我在目录/ data/data/[包名] /数据库中找到了*.db-wal文件.使用ContentProvider进行操作时,文件大小会非常快.它占用用户RAM空间太多.
建议关闭SQLiteOpenHelper来解决我的问题(这很有用)在这里输入链接描述.
但我希望找到一个"地方"来添加"close()"方法,因为我没有直接使用SQLiteOpenHelper(通过ContentProvider使用).ContentProvider中的query()方法必须返回一个Cursor,而SQLiteDatabse应保持打开状态.
我很困惑,我现在做什么让*.db-wal消失并正常使用ContentProvider?
谷歌最近发布了Android测试支持库1.0.阅读概述后,我对Android Test Orchestrator感到困惑.
它说
通常,AndroidJUnitRunner在同一个检测过程中运行所有测试,这可能会导致许多问题.
您能解释一下使用相同的仪器过程会导致哪些类型的问题?
如果一个测试崩溃,它会阻止测试套件的其余部分运行
根据我的经验,一次测试崩溃不会阻止其他测试用例运行.请指出我在这里误解了什么?
并且来自Android Testing Orchestrator开发人员指南,
为了完整性,Android Test Orchestrator在每次测试后运行pm.
所以Android Test Orchestrator会在每次测试后运行pm clear [test_package_name],对吧?
通过我的测试,每次测试后都不会执行pm clear [app_package_name].这意味着将不会清除被测应用程序的数据.因此,测试用例可能仍然存在彼此依赖关系.例如:
总的来说,经过一些试验,我没有发现Android Test Orchestrator的任何优势.有人可以帮助解决我的困惑吗?谢谢.
我的应用需要使用jni.逻辑看起来像:
void myJniFunc(JNIEnv *env, jclass clazz, jobjectArray items) {
int count = 10;
struct MyObj *myObjArray = (struct MyObj*)malloc(sizeof(struct MyObj) * count);
for (i = 0; i < count; i++) {
jobject obj = (*env)->GetObjectArrayElement(env, items, i);
jfieldID fieldId = ...;
jstring jstr = (*env)->GetObjectField(env, obj, fieldId);
myObjArray[i].name = (*env)->GetStringUTFChars(env, jstr);
(*env)->DeleteLocalRef(env, obj);
// Location A
}
// some code which will use myObjArray
process(count, myObjectArray);
// Location B
}
Run Code Online (Sandbox Code Playgroud)
通过JNI doc,GetStringUTFChars返回的数组应该使用
(*env)->ReleaseStringUTFChars(env, jstr, myObjArray[i].name);
(*env)->ReleaseLocalRef(env, jstr);
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我想正确释放jstring,我该怎么办?