android Paging库中Executor的真正用途是什么?

时间:2019-03-28 15:33:46

标签: android paging threadpoolexecutor

我看到了大多数在数​​据源类中使用Executor的示例,这些示例通常从ViewModel传递给DataSourceFactory,然后再传递给DataSource类。如何使用执行程序。使用执行器有什么好处/好处。

VIEWMODEL

public FooViewModel{

public FooViewModel() {

    executor = Executors.newFixedThreadPool(5);
    //pasing executor here.
    FooDataSourceFactory itemDataSourceFactory = new 
   FooDataSourceFactory(executor);


}

数据存储

public class FooDataSourceFactory extends DataSource.Factory {
private FooDataSource itemDataSource;
private Executor executor;
//creating the mutable live data
private MutableLiveData<FooDataSource> itemLiveDataSource = new 
MutableLiveData<>();

public FooDataSourceFactory(Executor executor) {
    this.executor = executor;
}


@Override
public DataSource create() {
    //passing executor here..
    itemDataSource = new FooDataSource(executor);

    //posting the dataSource to get the values
    itemLiveDataSource.postValue(itemDataSource);

    //returning the dataSource
    return itemDataSource;

.................
}

数据源

public class FooDataSource { 

 FooDataSource(Executor executor){
       //don't know what to do with executor
    }
}

1 个答案:

答案 0 :(得分:1)

  

Executor

     

一个执行提交的可运行任务的对象。此接口提供了一种将任务提交与每个任务的运行机制(包括线程使用,调度的详细信息)分离的方式。通常使用执行程序来代替显式创建线程。例如,而不是调用   new Thread(new RunnableTask()).start()对于每组任务,您可以使用:    executor.execute(runnable);

在分页中,库的目标是异步执行所有操作。
执行器可以为您提供帮助,轻松地异步插入和检索数据,而无需使用线程。

如果您正在开发具有MVVM架构的应用程序,则可能有一些“存储库”类可以处理本地数据和/或网络api调用。在这种情况下,建议使用执行程序查询数据库。

如果您希望在数据更改时不对主线程执行某些操作,还可以使用执行程序来观察分页列表。


在您的特定情况下,您在DataSourceDataSourceFactory中可能不需要执行程序。 这取决于您在这些课程中的工作。 如果您要从网络中获取数据,那么有很多像volleyretrofit2这样的库可以异步执行http调用,因此不需要执行程序。

Room之类的本地数据库中检索数据时:

  

开箱即用的空间不支持主线程上的数据库访问,因此执行程序在那里以确保工作在单独的线程上完成。 reference

希望您的回答对您有所帮助。