安卓网络请求历史,如何有效管理与优化?
1、HttpClient时期(2008-2013)
:在Android 2.2之前,HttpClient是Google官方推荐使用的网络请求方式,它是由Apache公司提供的一个高效的、功能丰富的HTTP协议工具包,支持最新的HTTP协议版本和建议。
特点:HttpClient封装了HTTP请求的参数、内容体、响应等,拥有众多API,但API较为复杂。
示例代码:
public class HttpClientExample { private static final int TIMEOUT_IN_MILLIONS = 5000; public interface CallBack { void onRequestComplete(String result); } public static void doGetAsyn(final String urlStr, final CallBack callBack) { new Thread() { public void run() { try { String result = doGet(urlStr); if (callBack != null) { callBack.onRequestComplete(result); } } catch (Exception e) { e.printStackTrace(); } } }.start(); } public static String doGet(String urlStr) { URL url = null; HttpURLConnection conn = null; InputStream is = null; ByteArrayOutputStream baos = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(TIMEOUT_IN_MILLIONS); conn.setConnectTimeout(TIMEOUT_IN_MILLIONS); int responseCode = conn.getResponseCode(); if (responseCode == 200) { is = conn.getInputStream(); String response = getStringFromInputStream(is); return response; } else { throw new NetworkErrorException("response status is " + responseCode); } } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); } } return null; } private static String getStringFromInputStream(InputStream is) throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len); } is.close(); String state = os.toString(); // 使用UTF-8编码转换流中的数据 os.close(); return state; } }
2、HttpURLConnection时期(2013-2016)
:在Android 2.3之后,Google官方推荐使用HttpURLConnection作为网络请求的主要方式,HttpURLConnection是Java标准类库java.net中的一员,但在Android 2.2版本之前,该类还不够完善,存在一些问题。
特点:HttpURLConnection没有封装太多功能,若需要高级功能,如重定向、会话和cookie等,则会显得不太方便。
示例代码:
public class HttpURLConnectionExample { private static final int TIMEOUT_IN_MILLIONS = 5000; public interface CallBack { void onRequestComplete(String result); } public static void doGetAsyn(final String urlStr, final CallBack callBack) { new Thread() { public void run() { try { String result = doGet(urlStr); if (callBack != null) { callBack.onRequestComplete(result); } } catch (Exception e) { e.printStackTrace(); } } }.start(); } public static String doGet(String urlStr) { URL url = null; HttpURLConnection conn = null; InputStream is = null; ByteArrayOutputStream baos = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(TIMEOUT_IN_MILLIONS); conn.setConnectTimeout(TIMEOUT_IN_MILLIONS); int responseCode = conn.getResponseCode(); if (responseCode == 200) { is = conn.getInputStream(); String response = getStringFromInputStream(is); return response; } else { throw new NetworkErrorException("response status is " + responseCode); } } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); } } return null; } private static String getStringFromInputStream(InputStream is) throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len); } is.close(); String state = os.toString(); // 使用UTF-8编码转换流中的数据 os.close(); return state; } }
3、Volley时期(2013年至今)
:2013年Google I/O大会后,Google官方推出了Volley框架,Volley是一个强大的网络请求库,旨在简化网络请求的过程,并提供缓存机制。
特点:Volley提供了简单的API来执行网络请求,并且可以自动处理图片加载和缓存,它的设计使得开发者可以很容易地扩展和自定义。
示例代码:
import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.toolbox.Volley; import android.content.Context; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private RequestQueue mQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mQueue = Volley.newRequestQueue(this); String url = "http://www.baidu.com"; // 发起一个GET请求 mQueue.add(new Request<String>(Request.Method.GET, url, null, new Response.Listener<String>() { @Override public void onResponse(String response) { // 处理响应结果 } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // 处理错误情况 } })); } }
4、OkHttp时期(2016年至今)
:OkHttp是一个现代的网络请求库,由square公司开发,自从推出以来,OkHttp因其高效、简洁和灵活而受到广泛欢迎。
特点:OkHttp支持同步和异步请求,提供了丰富的API来处理各种HTTP请求和响应,它还支持连接池和GZIP压缩等功能。
示例代码:
import okhttp3.*; import java.io.IOException; import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.internal.hucKing.Interceptor; import okhttp3.internal.hucKing.InterceptorChain; import okhttp3.internal.hucKing.Request; import okhttp3.internal.hucKing.Response; import okhttp3.internal.hucKing.ResponseBody; import okhttp3.internal.hucKing.okio.GzipSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource; import okhttp3.internal.hucKing.okio.Okio; import okhttp3.internal.hucKing.okio.BufferedSource; import okhttp3.internal.hucKing.okio.ForwardingSource;
到此,以上就是小编对于“安卓网络请求历史”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。