0

合計99,833語を含むが、文字ごとに区切られた辞書データベースがあります。私は3922語を含むdictionaryA.txtをテストしています。

ケース1:

調べたい単語を入力すると、「そろばん」と言いましょう。バッファリングされたリーダーを使用すると、アプリに「論文が応答していません。待ってください-終了します」と表示されます。待機を選択すると、そろばんという単語とその定義が返されます。

コード:

InputStream inputStream = getResources().openRawResource(R.raw.definitiona); 
                    try {
                        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
                        String s = in.readLine();
                        String delimiter = " - ";
                        String del[];
                        while(s != null)
                        {
                            s = in.readLine().replaceAll("\\s+", " ");
                            del = s.split(delimiter);
                            if (enhancedStem.equals(del[0]))
                            {
                                in.close();
                                databaseOutput.setText(s);
                                break;
                            }                        
                        }
                        in.close();
                        }
                    catch (FileNotFoundException e) {
                        databaseOutput.setText("" + e);
                    }
                    catch (IOException e1) {
                        databaseOutput.setText("" + e1);
                    }

ケース2:

調べたい単語を入力すると、strings.xml(文字列配列で3922語全体を転送した)を使用して「そろばん」と言います。同じことを言います。応答する前に[待機]をクリックする必要があります。

コード:

String[] wordA = getResources().getStringArray(R.array.DictionaryA);
                String delimiter = " - ";
                String[] del;
                for (int wordActr = 0; wordActr <= wordA.length - 1; wordActr++)
                {
                    String wordString = wordA[wordActr].toString();
                    del = wordString.split(delimiter);

                    if (enhancedStem.equals(del[0]))
                    {
                        databaseOutput.setText(wordA[wordActr]);
                        break;
                    }
                    else
                        databaseOutput.setText("Word not found!");

                }

どちらが良いか教えていただけますか?テキストファイルを使い続ける必要がありますか?または、どちらも応答が遅いので、strings.xmlに転送しますか?そして、私が「応答しない」問題をどのように取り除くことができるか、あなたは何か考えがありますか?前もって感謝します!

4

4 に答える 4

2

Xml をテキスト ファイルよりも使用する主な利点は次のとおりです。

  1. 構造が明確に定義されている場合、解析は簡単な作業です。
  2. xml のスキーマを定義することもできます。これにより、xml を非常に簡単にトラバースでき、タイプ セーフになります。
  3. よりよい性能。
  4. より信頼できる。

そのため、xmlを使用する方が良いです...

于 2013-02-28T12:23:13.047 に答える
1

メインスレッドで重い操作を実行しているため、待機メッセージが表示されます。スレッドまたはAsyncTaskを使用して、待機メッセージを削除できます

あなたと同様のユースケースでは、strings.xmlの使用がGoogleによって推奨されています

于 2013-02-28T12:20:44.003 に答える
1

コードを表示すると、これは簡単になります。私の最初の推測では、UIが応答していないため、UIスレッドで「検索タスク」を実行していると思います。UIスレッドで重いタスクを実行することは、一般的には良い考えではありません。代わりに、AsyncTasks、スレッド、またはその他の最適なものを調べる必要があります。タスクをバックグラウンドで実行することにより、ユーザーは引き続きアプリケーションを操作できます。たとえば、検索にタイプミスがある場合や、単に気にしない場合は、検索タスクを停止します。検索が完了して結果が取得されるまで、ある種の待機ダイアログを表示するだけです。

あなたの2つの提案のどちらが速いかはわかりません。2つのスレッドを作成し、どちらも一方向で時間を測定することができます。

于 2013-02-28T12:21:09.507 に答える
0

99,833 語を 2 MB 未満に格納可能

その場合、最速はメモリに保持することなので、ケース3 :)

于 2013-02-28T12:22:12.180 に答える