2017-08-26 12 views
1

Loaderの使用については疑問があります。 私の場合は、AsyncTaskLoaderに拡張された自分のクラスを呼び出し、ListのMyObjectを返します。多くのローダーを同じアクティビティで同時に実行できますか?

public class MyActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MyObject>> { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     getLoaderManager().initLoader(1, null, this); 
     getLoaderManager().initLoader(2_ID, null, this); 
     getLoaderManager().initLoader(3_ID, null, this); 
     ... 
    } 

} 

私の質問はです:私は多くのLoaderが同じActivity上で同時に実行できますか?

そのloadInBackground()メソッドが終了すると、すべてのローダーは、私のActivityにimpemented onLoadFinished()メソッドを呼び出すのだろうか?

ありがとうございます。

答えて

1

はいローダーは非同期プロセスであるため、一意のIDを持つ1つのアクティビティで一度に多数のローダーを実行できます。以下のサンプルテンプレートを見つけてください。

public class SampleActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sample); 
     initLoaders(); 
    } 

    private void initLoaders() { 
     getLoaderManager().initLoader(1, null, null); 
     getLoaderManager().initLoader(2, null, null); 
     getLoaderManager().initLoader(3, null, null); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     CursorLoader cursorLoader = null; 
     switch (id) { 
      case 1: 
       cursorLoader = new CursorLoader(this, CONTENT_URI, 
         PROJECTION, selection, null, null); 
       break; 

      case 2: 
       cursorLoader = new CursorLoader(this, CONTENT_URI, 
         PROJECTION, selection, null, null); 
       break; 

      case 3: 
       cursorLoader = new CursorLoader(this, CONTENT_URI, 
         PROJECTION, selection, null, null); 
       break; 
     } 
     return cursorLoader; 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     switch (loader.getId()) { 
      case 1: 
       if (data != null && data.getCount() > 0) 
        setData1(); 
       break; 

      case 2: 
       if (data != null && data.getCount() > 0) 
        setData2(); 
       break; 

      case 3: 
       if (data != null && data.getCount() > 0) 
        setData3(); 
       break; 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 

    } 
} 
+0

ありがとうございます:) – MDP

関連する問題