我可以在同一个 activity 中同时 运行 多个加载程序吗?

Can I run many Loaders at the same time in the same activity?

我对Loader的使用有疑问。 在我的例子中,我调用自己的 class 扩展 AsyncTaskLoader 和 return MyObject 的 List

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);
       ...
  }

}

我的问题是:我可以在同一个Activity上同时运行多个Loader吗?

每个 Loader 是否会在其 loadInBackground() 方法完成后调用我的 Activity 中实施的 onLoadFinished() 方法?

提前致谢。

是的,我们可以在一个 activity 中同时使用 运行 个具有唯一 ID 的加载程序,因为加载程序是一个异步进程。请在下面找到示例模板。

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) {

    }
}