android中网络请求中页面关闭了会怎么样
来源:互联网 发布:javascript prompt 编辑:程序博客网 时间:2024/04/29 22:09
这是我在面试的时候,别人问的,其实 ,在实际开发中,并没有怎么遇到:
如果activity中开启了一个网络请求,正在请求中的时候,activity关闭了,那网络请求会怎么样?
因为之前没有遇到过这个问题,我当时想的是,网络请求是异步的,应该还会继续,数据返回以后,比如要往一个textview上绑定数据,那textview因为页面destory,可能会为空,所以报空指针。
后来,我专门自己做了一下实验,发现不是这样的:
public class TestZipActivity extends Activity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); textView = (TextView) findViewById(R.id.text); AsyncHttpClient httpClient = new AsyncHttpClient(); RequestHandle requestHandle = httpClient.get("https://www.baidu.com/", new TextHttpResponseHandler() { @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { System.out.println(responseString); textView.setText(responseString); } }); this.finish(); }}这是我的实验代码,在activity中,作了一次网络请求,可以看到,使用了匿名内部类,同时关闭了activity,我的手机使用了2G网络,可以保证,在activity结束的时候,网络请求结果还没有返回。
结果:
没有任何异常报出。
第二个测试:
public class TestZipActivity extends Activity implements Response.Listener, Response.ErrorListener { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); textView = (TextView) findViewById(R.id.text); AsyncHttpClient httpClient = new AsyncHttpClient(); RequestQueue requestQueue = Volley.newRequestQueue(this); StringRequest stringRequest = new StringRequest("https://www.baidu.com/", this, this); requestQueue.add(stringRequest); this.finish(); } @Override public void onErrorResponse(VolleyError error) { } @Override public void onResponse(Object response) { System.out.println(response); textView.setText((String) response); }}
这个测试可以很清楚地看到,activity直接实现了回接口。而同样的,也没有异常报出。
我目前粗浅地理解:
内部类会持有整个外部类的引用,所以,即使在手机上,页面虽然已经关闭了,但其实 ,这些资源还是没有释放的,所以,设置起来还是异常的。而网络请求,因为是异步的,肯定还是会走完的。
而继承这个,也是同样的,网络请求持有这个回调的实例,一直没有释放,所以,内存是没有办法回收的。
希望大神给一个解释。
4 0
- android中网络请求中页面关闭了会怎么样
- Android中网络请求 Volley
- 图形图像的前景会怎么样?迷茫中--------
- 在RAC中,当私有网线拔了后,会怎么样?
- iOS9 中关闭ATS的方法(网络请求失败)
- android 中怎么样自定义attributes
- Android M的设备,将mdpi中的图片放到hdpi中,显示会怎么样?
- android中网络请求方式的总结
- Android中解析网络请求的URL
- Android中retrofit网络请求框架使用
- Android中Http网络请求响应基本知识
- Android中网络请求—HttpClient、HttpURLConnection
- Android中HttpConnection+Servlet实现网络请求
- Android中okhttp网络请求的封装
- Android中异步任务请求网络数据
- android中使用 HttpURLConnection 做网络请求
- 在Ajax请求中以_blank方式请求新的页面会被拦截
- Xutils中网络请求
- Canvas设置width与height 的问题!
- 第四章 Controller接口控制器详解(3)
- Epoll模型详解
- <android> SCREEN_ON SCREEN_OFF黑屏, 亮屏消息只能动态注册
- 一路走来,一路收获
- android中网络请求中页面关闭了会怎么样
- Android Studio中 Logcat信息级别分类及设置步骤
- _OBJC_CLASS_$_ referenced from
- NSOperationQueue 队列
- 数据库随机读取数据
- 微信企业号开发之如何建立连接
- 关于在读取后台的数据显示为问号
- GitHub上史上最全的Android开源项目分类汇总
- mysql中对数字处理的函数