将单词插入UserDictionary的最快方法

时间:2012-02-15 16:51:56

标签: android android-contentprovider android-contentresolver

我希望app向UserDictionary添加几个(2k)单词。

我已经尝试过ContentResolver()。insert / bulk insert ....

// array of words
    String[] words = getResources().getStringArray(R.array.word_array); 

    Long start,end = null;

    start = System.currentTimeMillis();


    int len = words.length;
    ContentValues[] mValueArray = new ContentValues[len];
    ContentValues mNewValues = new ContentValues();

    mNewValues.put(UserDictionary.Words.APP_ID, "com.my.example");
    mNewValues.put(UserDictionary.Words.LOCALE, "en");
    mNewValues.put(UserDictionary.Words.FREQUENCY, "100");

    for (int i = 0; i < len; ++i) {

        mNewValues.put(UserDictionary.Words.WORD, words[i]);

        mValueArray[i] = mNewValues;
    }

    getContentResolver().bulkInsert(
            UserDictionary.Words.CONTENT_URI,   // the user dictionary content URI
           mValueArray                       // the values to insert
        );
   end = System.currentTimeMillis();

   Toast toast = Toast.makeText(this, "Time for " + Integer.toString(len-1)+" words: " + Long.toString((end-start)) + "ms", 50);
   toast.show();

在我的手机上,如果我在100分钟的时间内进行bulkinsert,每个单词需要大约100毫秒.3 +分钟插入2k字。

是否有人知道插入单词的更快方法或可以完成的任何优化?

附带问题:UserDictionary大小是否有上限,还是取决于手机?

任何帮助表示赞赏

Michealster

2 个答案:

答案 0 :(得分:2)

特定于您的情况: 一次在字典中添加2000个单词需要花费时间,并且没有太多可以完成的优化。您在此处看到的时间是文件操作,并从Java-&gt; NDK-&gt; Native操作开始。

一般: 无论使用何种方法,都必须理解这些只不过是文件操作,并且必然需要时间。 API(包括SQLite相关)只是本机代码中预期文件操作的包装器。原生文件写入总是需要更长的时间,然后文件读取。

答案 1 :(得分:1)

我在Android的源代码中看到,对于大型sql查询,使用了applyBatch方法。在作为ContactsRemover的一些其他程序中,作者也使用此方法。但我不知道它是否真的比insert或bultInsert快。