证书下载AsyncTask

117 阅读1分钟

本文已参加「新人创作礼」活动,一起开启掘金创作之路。

1、AsyncTask示例

	@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        resetLanguageSetting(mLanguage);
    }

    /**
     * 返回Activity时,要重新设置language,防止语言错乱
     * WebView会引起语言错乱
     *
     * @param language
     */
    protected void resetLanguageSetting(String language) {
        if (TextUtils.equals(language, ZH_CN)) {
            //简体
            LanguageUtils.switchLanguage(getActivity(), Locale.SIMPLIFIED_CHINESE);
        } else if (TextUtils.equals(language, EN_US)) {
            //英文
            LanguageUtils.switchLanguage(getActivity(), Locale.US);
        } else {
            //繁体
            LanguageUtils.switchLanguage(getActivity(), Locale.TRADITIONAL_CHINESE);
        }
    }
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();

2、串行并行

	/**
     * 异步线程
     */
    private class MyAsyncTask extends AsyncTask<String, Void, String> {

//        public abstract class AsyncTask<Params, Progress, Result>{}
//        a. Params:开始异步任务执行时传入的参数类型,对应excute()中传递的参数
//        b. Progress:异步任务执行过程中,返回下载进度值的类型
//        c. Result:异步任务执行完成后,返回的结果类型,与doInBackground()的返回值类型保持一致


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {

            Log.i(Constans.TAG, strings[0] + "------" + strings[1] + "---启动");

            int cnt = 0;
            while (cnt < 20) {
                cnt++;
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            return strings[0] + "------" + strings[1] + "---完成";
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.i(Constans.TAG, s);
        }
    }

串行

	private void initAsyncTaskSerial() {
        MyAsyncTask task_1 = new MyAsyncTask();
        MyAsyncTask task_2 = new MyAsyncTask();
        MyAsyncTask task_3 = new MyAsyncTask();
        MyAsyncTask task_4 = new MyAsyncTask();


        task_1.execute("串行", "task_1");
        task_2.execute("串行", "task_2");
        task_3.execute("串行", "task_3");
        task_4.execute("串行", "task_4");
    }

并行

    private void initAsyncTaskParallel() {
        MyAsyncTask task_5 = new MyAsyncTask();
        MyAsyncTask task_6 = new MyAsyncTask();
        MyAsyncTask task_7 = new MyAsyncTask();
        MyAsyncTask task_8 = new MyAsyncTask();

        task_5.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "并行", "task_5");
        task_6.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "并行", "task_6");
        task_7.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "并行", "task_7");
        task_8.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "并行", "task_8");
    }

3、证书下载

	/**
     * 耗时任务
     */
    private class DownLoadCertsTask extends AsyncTask<Void, Void, Certificate> {
        private OnCertDownLoadListener onCertDownLoadListener;
        private String certUrl;

        public DownLoadCertsTask(String certUrl, OnCertDownLoadListener onCertDownLoadListener) {
            this.onCertDownLoadListener = onCertDownLoadListener;
            this.certUrl = certUrl;
        }

        @Override
        protected Certificate doInBackground(Void... voids) {
            LogUtils.i(TAG, " 下载中 ->" + Thread.currentThread().getName());
            if (isCancelled()) {
                return null;
            }
            return downLoadCertificates(certUrl);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            LogUtils.i(TAG, "下载前->");
        }

        @Override
        protected void onPostExecute(Certificate certificate) {
            super.onPostExecute(certificate);
            LogUtils.i(TAG, "下载完毕->");
            if (onCertDownLoadListener != null) {
                onCertDownLoadListener.onCertDownLoaFinish(certificate != null, certificate);
            }
        }
    }
	private Certificate downLoadCertificates(String certUrl) {
        LogUtils.i(TAG, "下载开始 ->");
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(certUrl).build();
        X509Certificate certificate = null;
        try {
            Response response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful() && response.body() != null) {
                certificate = (X509Certificate) CertificateFactory.getInstance("X509").generateCertificate(response.body().byteStream());
            }
        } catch (Exception e) {
            if (BuildConfig.isLogDebug) {
                e.printStackTrace();
            }
        }
        return certificate;
    }