1

Assetsフォルダーにあるテキストファイルからデータを読み取るアプリを作成しています。ファイルごとに、データを個別に保存しますArrayList。ファイルは、アクティビティのonCreate()メソッドで次々に読み込まれます。すべてのテキストファイルの合計は1.8MBであり、エミュレーターでは、アクティビティのロードに現在12秒かかります。アプリはエミュレーターでクラッシュしません(約12秒かかります)。

非同期スレッドについて読んだことがありますが、過去にそれらを必要としたことはありません。アクティビティが実際に読み込まれていてクラッシュしていないことをユーザーに通知するために、ある種のメッセージまたはプログレスバーを用意することを計画していました。

だから私の質問は:アクティビティをロードするときにアプリがクラッシュしない場合でも、ファイルの読み取りを非同期スレッドまたは別のスレッドに置く必要がありますか?もしそうなら、私はそれを適切に行うにはどうすればよいですか?(私はこれまでやったことがありません。)

テキストファイルを読み取ったサンプルコードは次のとおりです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_name);

    populateArrayLists();

}

public void populateArrayLists() {
    BufferedReader br = null;
    try {
        br = new BufferedReader(new InputStreamReader(getAssets().open(
                "text1.txt")));
        String text;
        while ((word = br.readLine()) != null) {
            ArrayList1.add(text);
        }                           
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            br.close(); // stop reading
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


    br = null;
    try {
        br = new BufferedReader(new InputStreamReader(getAssets().open(
                "text2.txt")));

    // the same process is duplicated for 1-15
    // it may not be the best or most efficient way but it works

どんな助けでもいただければ幸いです。

4

1 に答える 1

0

はい、これにはバックグラウンドスレッドが必要です。ローダーAPIが最も簡単な方法かもしれません。

これにより、ファイルの読み込み中に少なくとも通知を表示し、コンテンツを提供できるようになります。たぶん、それらをロードして、データを段階的に表示することもできます。

編集:ローダーは、互換性ライブラリで利用可能な3.0の機能です。依存関係を追加したくない場合は、いつでもAsyncTaskにフォールバックできます。その場合は、これを確認できます

于 2013-02-05T23:56:21.913 に答える