OkHttp的一些东西
1.同步请求必须在子线程中执行,因为在Android4.0之后主线程中不允许网络请求,究其根本是因为同步网络请求会造成线程阻塞,主线程中阻塞5秒会ANR。
2.onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()
3.client.execute直接返回response,通过线程间通信的方式:1.handler.sendMessage2.runOnUiThread(runnable) 3.view.post(runnable) 在主线程中更新UI
4.同步请求一般用于当前线程的执行必须使用另一个线程的数据,比如A线程执行中必须使用B线程返回的数据,此时可以在A线程中使用client.execute(),A线程阻塞,等待B线程返回结果后继续执行。//好像有错,应该是同步请求只能用于子线程,会阻塞当前线程
5.应尽量使用异步请求,因为同步请求需要我们自己创建子线程。
6.Activity判断当前线程是否是主线程是在onResume()方法中。所以在onCreate中创建子线程并更新UI可能不会报错。
7.异步请求call.enqueue(newCallback())的两个回调方法onFailure和onResponse均是在子线程中执行的,支持大文件的下载。需要更新UI是仍需要使用handler等方法。
8.每个 response的body 只能被消费一次,多次消费会抛出异常,也就是说每个body只能被获取一次。body 必须被关闭,否则会发生资源泄漏。