[置顶] NoHttp详解之Reqeust与Activity生命周期联动-取消请求

Android在Activity结束时取消请求

技术交流1群:46523908
技术交流2群:46505645
NoHttp 源码及Demo:https://github.com/Y0LANDA/NoHttp

NoHttp是专门做Android网络请求与下载的框架。

为什么要在Activity finish的时候取消网络请求

  大家都知道Android在发起网络请求的时候必须要在子线程,那么就得是异步的操作,说到异步必须得是handler了。
  现在来举一个例子,在Activity中开启一个子线程做耗时操作,利用Handler把结果发回主线程,当主线程还没有收到子线程发回来结果时,我们把Activity干掉了,干掉之后子线程又通过Handler把结果发回来了,这时候如果去更新UI的话,那APP就挂了。
  同样的道理,我们的网络请求就是需要异步操作的,那么为了防止出现上述情况,我们在finish Activity把请求Reqeust给取消了,那么就不会出现上述问题了。
  值得高兴的是,Android开源网络框架NoHttp为我们考虑了这些事情,并且很周到。
  NoHttp源码和Demo:https://github.com/Y0LANDA/NoHttp
  NoHttp教程:http://blog.csdn.net/yanzhenjie1003

NoHttp的恰到好处

在需要请求网络的地方new出请求,并作为Activity的成员变量,这里在onCreate中模拟:

/** * 请求对象 */
private Request<String> mRequest;

@Override
protected void onActivityCreate(Bundle savedInstanceState) {
    setTitle(Application.getInstance().nohttpTitleList[9]);
    setContentView(R.layout.activity_cacel);
    // 创建请求对象
    mRequest = NoHttp.createStringRequest(url, RequestMethod.GET);
}

在activity销毁的时候取消请求

@Override
protected void onDestroy() {
    if (mRequest != null)
        mRequest.cancel();
    super.onDestroy();
}

这样就算我们在结果还没有返回的时候取消了请求也不会出现任何异常,推荐大家使用NoHttp。

NoHttp 源码及Demo:https://github.com/Y0LANDA/NoHttp

你可能感兴趣的:(android,框架,线程,网络,NoHttp)