使用RxJava(或RxAndroid等)替代Android中的AsyncTask如何帮助防止上下文泄漏?在AsyncTask中,如果在执行它时用户离开了应用程序,则活动上下文可能为空,并且应用程序可能会崩溃。我听说过在执行线程操作时,RxJava可以帮助避免这种类型的崩溃。我还听说它可以比AsyncTask的doInBackground方法(错误处理不好)做到更好的错误处理。大多数情况下,如果任何事情出现问题,我只返回null(例如),但我读到RxJava可以返回精确的错误而不会泄漏。有人能给个例子吗?
以下是使用AsyncTask时,如果用户在其试图向UI报告结果时离开应用程序,则应用程序将崩溃的小演示:
以下是使用AsyncTask时,如果用户在其试图向UI报告结果时离开应用程序,则应用程序将崩溃的小演示:
@SuppressWarnings("unused")
private class GetTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPostExecute(String result) {
pd = new ProgressDialog(getActivity().getApplicationContext());//can crash right here
pd.setTitle("Grabbing Track!");
pd.setMessage("Please wait...");
pd.setCancelable(false);
pd.setIndeterminate(true);
pd.show();
}}
这里是一个doInBackground方法调用,不会发送有用的错误:
@Override
protected String doInBackground(String... params) {
String myIntAsString = 1/0 + ""; //this should give an error (how do we report it to the caller??
//or if we are parsing json and it fails, how do we report it to the caller cleanly. Can RxJava help?
}