2017-07-09 7 views
0

developers.android.com上で、 "ローダーが初期化され、アクティブであることを確認します。ローダーがまだ存在しない場合は作成され、アクティビティ/フラグメントが現在開始されている場合はローダーが開始されます。最後に作成されたローダは再利用されます。ローダーが既に存在する場合、initLoaderは何を行いますか?

最後に作成されたローダが再利用されたことはどういう意味ですか? ローダーがすでに存在する場合、initLoader()の直後にどのメソッドを即座に呼び出しますか?

私はローダーでキャッシュがどのように動作するのかまだ分かりませんので、この質問をしています。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    getSupportLoaderManager().initLoader(loaderId, null, MainActivity.this); 
} 

public Loader<String[]> onCreateLoader(int id, final Bundle loaderArgs) { 

    return new AsyncTaskLoader<String[]>(this) { 

     String[] mCachedData = null; 

     @Override 
     protected void onStartLoading() { 
      if (mCachedData != null) { 
       deliverResult(mCachedData); 
      } else { 
       forceLoad(); 
      } 
     } 

. . . . . 

} 

上記のコードでは、ローダーが既に存在する場合、フローは何ですか?どのメソッドをinitLoaderの後に呼びますか?なぜなら、onCreateLoaderを呼び出すと、キャッシュされたDataはnullに再び初期化されるからです。

+0

ローダーが存在する場合は、 'onLoadFinished'が呼び出されるのを待つだけで済みます。 – Enzokie

+0

ああ。どうもありがとう。今、私は分かる! –

答えて

0

LoaderManagerソースをチェックすると、initLoaderは同じIDを持つローダーが存在しない場合にのみローダーを作成します。

ローダー が既に存在する場合、initLoader()の後にすぐにどのメソッドを呼び出しますか?

これは、ローダがすでに(thisを確認してください)、その仕事で行われている場合のみonLoadFinishを呼び出すためにローダーに指示します。
ローダーがジョブを完了していない場合は、ローダー自身がonLoadFinishを呼び出します。

関連する問題