我看到了大多数在数据源类中使用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
}
}
答案 0 :(得分:1)
一个执行提交的可运行任务的对象。此接口提供了一种将任务提交与每个任务的运行机制(包括线程使用,调度的详细信息)分离的方式。通常使用执行程序来代替显式创建线程。例如,而不是调用
new Thread(new RunnableTask()).start()
对于每组任务,您可以使用:executor.execute(runnable);
在分页中,库的目标是异步执行所有操作。
执行器可以为您提供帮助,轻松地异步插入和检索数据,而无需使用线程。
如果您正在开发具有MVVM架构的应用程序,则可能有一些“存储库”类可以处理本地数据和/或网络api调用。在这种情况下,建议使用执行程序查询数据库。
如果您希望在数据更改时不对主线程执行某些操作,还可以使用执行程序来观察分页列表。
DataSource
和DataSourceFactory
中可能不需要执行程序。
这取决于您在这些课程中的工作。
如果您要从网络中获取数据,那么有很多像volley和retrofit2这样的库可以异步执行http调用,因此不需要执行程序。
从Room之类的本地数据库中检索数据时:
开箱即用的空间不支持主线程上的数据库访问,因此执行程序在那里以确保工作在单独的线程上完成。 reference
希望您的回答对您有所帮助。