2016-07-17 4 views
0

以下は、私がフォローしていたAndroidチュートリアルの本のコードスニペットです。 loadInBackgroundはカーソルを取得し、cursor.getCount()を実行して「コンテンツウィンドウがいっぱいになっている」ことを確認します。これは何を意味するのでしょうか? getCountの文書では、「カーソルの行数を返す」とだけ言います。私はGoogled "これは、コンテンツウィンドウがいっぱいになっていることを確認した"とこれを行ういくつかの抜粋がありますが、すべて同じコメントが、なぜこれが必要/どのように動作するの説明がありません。カーソル#getCountは、コンテンツウィンドウがいっぱいになるようにするために使用されますか?

import android.content.AsyncTaskLoader; 
import android.content.Context; 
import android.database.Cursor; 

public abstract class SQLiteCursorLoader extends AsyncTaskLoader<Cursor> { 

    private Cursor cursor; 

    public SQLiteCursorLoader(Context context) { 
     super(context); 
    } 

    protected abstract Cursor loadCursor(); 

    @Override 
    public Cursor loadInBackground() { 
     Cursor cursor = loadCursor(); 
     if (cursor != null) { 
      cursor.getCount(); // ensure that the content window is filled 
     } 
     return cursor; 
    } 

} 
+0

本当にこのコメントを書いた開発者には、何を考えていたのですか? –

+0

@BobMalooga私は多くの場所で同じコード行を見るので、それは標準的なことだと思っていました。その 'getCount'行は不要ですか? –

+0

時間の無駄です。 –

答えて

2

ご存知のように、データベースはqueryCursorを返します。ただし、カーソルは、cursor.getCount()またはcursor.moveToFirst()などのような情報を読み取ろうとすると、効果的にデータで満たされます。

これは、大規模なクエリではっきりしています。例えば

、以下そのクエリが結果の千を返す想像:あなたが最後にcursor.getCount()を呼び出すときしかし、しかし...

を実行するために時間がかかりすぎていないことを声明

Cursor cursor = db.rawQuery("select * from TABLE", null); 

またはcursor.moveToFirst()を初めて使用すると、データベースからのデータでカーソルが効果的に満たされているため、「遅れ」が発生することがあります。

メインUIスレッドでこれを行うと、アプリが数秒間フリーズすることがあります。特に、低層のデバイスに特化しています。

このメソッドを呼び出すと、著者はデータが完全にロードされていることを確認しようとしています(loadInBackground())。この方法で、彼はデータが他の将来の方法ではバックグラウンドで読み込まれないようにします。このようにして、将来のgetCount()またはmoveToFirst()への呼び出しは、データが既にロードされているため、非常に迅速に実行されます。

とにかく、必須ではありません。

関連する問題