小编cmo*_*opm的帖子

我应该何时在ContentProvider使用的SQLiteOpenHelper上调用close()

在我的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 android-contentprovider sqliteopenhelper

15
推荐指数
2
解决办法
1万
查看次数

什么是Android Test Orchestrator?

谷歌最近发布了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].这意味着将不会清除被测应用程序的数据.因此,测试用例可能仍然存在彼此依赖关系.例如:

  • 测试用例A存储SharedPreference键值
  • 在测试用例A之后运行的测试用例B可以读出测试用例A存储的值

总的来说,经过一些试验,我没有发现Android Test Orchestrator的任何优势.有人可以帮助解决我的困惑吗?谢谢.

testing android android-espresso

10
推荐指数
1
解决办法
2669
查看次数

如何正确释放循环中的jstring?

我的应用需要使用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)
  1. 如果我在位置A释放返回的数组,那么myObjArray.name将为空
  2. 如果我在位置B释放返回的数组,因为我将保留jstring的引用,那么"将失败添加到JNI本地ref表(有512个条目)"将会发生

我的问题是:如果我想正确释放jstring,我该怎么办?

java-native-interface android android-ndk

6
推荐指数
1
解决办法
4559
查看次数