Android: Alternatives to AsyncTask?

前端 未结 7 2189
感动是毒
感动是毒 2020-12-16 13:58

for my app I made a framework for all network calls to an external API. I put everything in \"Services\" like: UserService, MessageService etc. So

7条回答
  •  离开以前
    2020-12-16 14:30

    RxJAVA is best option

    Alternative to Asynctask for Web service call,file upload,file download is Android Fast Networking Lib

    For other case you can use following method

     Disposable d = Observable.fromCallable(new Callable>() {
                @Override
                public HashMap call() throws Exception {
                // will run in background thread (same as doinBackground)
                    return postParam;
                }
            })
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer>() {
                        @Override
                        public void accept(final HashMap data) throws Exception {
    
            // will run in UI thread. write down code for on PostExecute
                        }
    
                    });
        // write down code for on preExecute
            DisposableManager.add(d);
    

    // dispose object

    @Override
        protected void onDestroy() {
            super.onDestroy();
            DisposableManager.dispose();
        }
            // Dispose manager class
    
    
     import io.reactivex.disposables.CompositeDisposable;
        import io.reactivex.disposables.Disposable;
    
        public class DisposableManager {
    
            private static CompositeDisposable compositeDisposable;
    
            public static void add(Disposable disposable) {
                getCompositeDisposable().add(disposable);
            }
    
            public static void dispose() {
                getCompositeDisposable().dispose();
            }
    
            private static CompositeDisposable getCompositeDisposable() {
                if (compositeDisposable == null || compositeDisposable.isDisposed()) {
                    compositeDisposable = new CompositeDisposable();
                }
                return compositeDisposable;
            }
    
            private DisposableManager() {}
        }
    

提交回复
热议问题