Android重構(二)

網絡底層框架設計

AsyncTask

   public void init2() {
        //對於網絡請求,我們一般定義為GET和POST即可,GET為請求數據,POST為修改數據
        /*Request:
        * GET:  https://www.xxx.com/aaa.api?key1=value1&key2=value2
        * 以鍵值對的形式進行存放,之所以這樣設計,是為瞭更方便地定義數據緩存
        * POST:我們將key-value這樣的兼職對存放在Form表單中進行提交
        * */
        /*Response
        * 一般都是以JSON數據進行返回
        * */
         new AsyncTaskDemo().execute();//調用此方法既可以執行異步操作
    }
    /*
    * 泛型分別是:傳入參數,網絡請求的進度,網絡請求返回的結果
    * */
    public class AsyncTaskDemo extends AsyncTask{
        @Override
        //顯示進度對話框等
        protected void onPreExecute() {
        }
        //網絡請求操作
        @Override
        protected Boolean doInBackground(String... url) {
            publishProgress();//用來調用onProgressUpdate()
            return null;
        }

        //更新進度條
        @Override
        protected void onProgressUpdate(Integer... values) {
        }

        //返回執行結果
        @Override
        protected void onPostExecute(Boolean aBoolean) {
        }
    }
    使用AsyncTask有一個致命缺點,那就是不能靈活控制其內部的線程池
    線程池裡面的每個方法存放的都是MobileAPI調用方法,而AsyncTask中又沒有暴露出取消這些請求的方法,也就是我們去洗的CancelRequest方法

使用原生的ThreadPoolExecutor+Runnable+Handler+okhttp

//給出的代碼都是隻言片語,無法敲個demo出來,不看瞭

You May Also Like