Android 如何将asynctask转换为Rxjava?
我正在尝试将以下两个异步任务转换为rxjava,但不确定如何进行。有什么想法吗Android 如何将asynctask转换为Rxjava?,android,android-asynctask,rx-java,rx-android,rx-java2,Android,Android Asynctask,Rx Java,Rx Android,Rx Java2,我正在尝试将以下两个异步任务转换为rxjava,但不确定如何进行。有什么想法吗 new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { /* Shutdown video players */ Set<
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
/* Shutdown video players */
Set<Map.Entry<String, PlayerBundle>> entries = videoPlayerPool.entrySet();
for (Map.Entry<String, PlayerBundle> entry : entries) {
PlayerBundle bundle = entry.getValue();
bundle.player.release();
}
/* Shutdown audio players */
entries = audioPlayerPool.entrySet();
for (Map.Entry<String, PlayerBundle> entry : entries) {
PlayerBundle bundle = entry.getValue();
bundle.player.release();
}
videoStreamer.stopStream();
videoStreamer.release();
audioStreamer.stopStream();
audioStreamer.release();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
cb.event(new Spin.Event<Void>());
}
}.execute();
newasynctask(){
@凌驾
受保护的Void doInBackground(Void…参数){
/*关闭视频播放器*/
Set entries=videoPlayerPool.entrySet();
对于(Map.Entry:entries){
PlayerBundle bundle=entry.getValue();
bundle.player.release();
}
/*关闭音频播放器*/
entries=audioPlayerPool.entrySet();
对于(Map.Entry:entries){
PlayerBundle bundle=entry.getValue();
bundle.player.release();
}
videoStreamer.stopStream();
videoStreamer.release();
audioStreamer.stopStream();
audioStreamer.release();
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
cb.event(新的Spin.event());
}
}.execute();
以及:
newasynctask(){
@凌驾
受保护的Void doInBackground(Void…参数){
Set entries=pool.entrySet();
对于(Map.Entry:entries){
参与者=entry.getValue();
参与者。释放();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
cb.event(新的Spin.event());
}
}.execute();
我的gradle中已经包含了rxjava,但不确定如何转换这个Observable.defer(new Func0(){
Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
/* Shutdown video players */
Set<Map.Entry<String, PlayerBundle>> entries = videoPlayerPool.entrySet();
for (Map.Entry<String, PlayerBundle> entry : entries) {
PlayerBundle bundle = entry.getValue();
bundle.player.release();
}
/* Shutdown audio players */
entries = audioPlayerPool.entrySet();
for (Map.Entry<String, PlayerBundle> entry : entries) {
PlayerBundle bundle = entry.getValue();
bundle.player.release();
}
videoStreamer.stopStream();
videoStreamer.release();
audioStreamer.stopStream();
audioStreamer.release();
return Observable.just(null);
}
})
.doOnCompleted(new Action0() {
@Override
public void call() {
cb.event(new Spin.Event<Void>());
}
})
.subscribeOn(Schedulers.computation())
.subscribe();
Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
Set<Map.Entry<String, Participant>> entries = pool.entrySet();
for (Map.Entry<String, Participant> entry : entries) {
Participant participant = entry.getValue();
participant.release();
}
return Observable.just(null);
}
}).doOnCompleted(new Action0() {
@Override
public void call() {
cb.event(new Spin.Event<Void>());
}
})
.subscribeOn(Schedulers.computation())
.subscribe();
@凌驾
公共可观测呼叫(){
/*关闭视频播放器*/
Set entries=videoPlayerPool.entrySet();
对于(Map.Entry:entries){
PlayerBundle bundle=entry.getValue();
bundle.player.release();
}
/*关闭音频播放器*/
entries=audioPlayerPool.entrySet();
对于(Map.Entry:entries){
PlayerBundle bundle=entry.getValue();
bundle.player.release();
}
videoStreamer.stopStream();
videoStreamer.release();
audioStreamer.stopStream();
audioStreamer.release();
返回可观察值。just(null);
}
})
.doOnCompleted(新操作0(){
@凌驾
公开作废通知(){
cb.event(新的Spin.event());
}
})
.subscribeOn(Schedulers.computation())
.subscribe();
可观察的延迟(新的Func0(){
@凌驾
公共可观测呼叫(){
Set entries=pool.entrySet();
对于(Map.Entry:entries){
参与者=entry.getValue();
参与者。释放();
}
返回可观察值。just(null);
}
}).doOnCompleted(新操作0(){
@凌驾
公开作废通知(){
cb.event(新的Spin.event());
}
})
.subscribeOn(Schedulers.computation())
.subscribe();
当你遇到问题时,试试这个,问真正的问题。关键字“TRY”以上两个是两个不同的异步任务。可以分开做吗。还有,什么是func0和action0。难道不可能像一个匿名类那样做吗?或者以相同的方式转换standalonesecond任务。Func0和Action0是匿名类。这些是接口名称。它给了我一个错误:无法解析符号func0和Action0。知道如何解决这个问题吗?确保你有这个导入:import rx.functions.Action0;导入rx.functions.Func0;导入rx.schedulers.schedulers;是完蛋了还是完蛋了?另外,我刚刚实现了:implementation'io.reactivex.rxjava2:rxjava:2.1.1'implementation'io.reactivex.rxjava2:rxandroid:2.0.1',我还需要实现:implementation'io.reactivex:rxjava:1.0.14'吗?
Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
/* Shutdown video players */
Set<Map.Entry<String, PlayerBundle>> entries = videoPlayerPool.entrySet();
for (Map.Entry<String, PlayerBundle> entry : entries) {
PlayerBundle bundle = entry.getValue();
bundle.player.release();
}
/* Shutdown audio players */
entries = audioPlayerPool.entrySet();
for (Map.Entry<String, PlayerBundle> entry : entries) {
PlayerBundle bundle = entry.getValue();
bundle.player.release();
}
videoStreamer.stopStream();
videoStreamer.release();
audioStreamer.stopStream();
audioStreamer.release();
return Observable.just(null);
}
})
.doOnCompleted(new Action0() {
@Override
public void call() {
cb.event(new Spin.Event<Void>());
}
})
.subscribeOn(Schedulers.computation())
.subscribe();
Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
Set<Map.Entry<String, Participant>> entries = pool.entrySet();
for (Map.Entry<String, Participant> entry : entries) {
Participant participant = entry.getValue();
participant.release();
}
return Observable.just(null);
}
}).doOnCompleted(new Action0() {
@Override
public void call() {
cb.event(new Spin.Event<Void>());
}
})
.subscribeOn(Schedulers.computation())
.subscribe();