本文已参加「新人创作礼」活动,一起开启掘金创作之路。
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;
}