android:线程池和AsyncTask使用小结,android插件化和热修复区别

在调用publishProgress(Progress… values)时,此方法被执行,直接将进度信息更新到UI组件上。

(主线程中执行,当后台任务的执行进度发送改变时此方法会被调用).

onPostExecute()方法

当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中, 直接将结果显示到UI组件上。

(异步执行后这个方法被调用)

代码示例(有详细的注释):

package tsou.cn.threadtest;

import android.app.ProgressDialog;

import android.os.AsyncTask;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.widget.TextView;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.concurrent.Executor;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.LinkedBlockingDeque;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class AsyncTaskActivity extends AppCompatActivity {

/**

  • TextView

*/

private TextView mTextView;

private AsyncTask<String, Integer, StringBuilder> task;

private ProgressDialog progressDialog;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_async_task);

initData();

initView();

// initExecute();

// initExecuteOnExecutor();

initMyExecute();

}

private void initData() {

progressDialog = new ProgressDialog(AsyncTaskActivity.this);

progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

progressDialog.setMessage(“加载中…”);

}

private void initView() {

mTextView = (TextView) findViewById(R.id.textView);

}

/**

  • 默认AsyncTask.SERIAL_EXECUTOR

  • 2.3系统同时execute执行10个异步任务

  • 3.1版本之前的系统默认最大并发执行5个线程,缓冲线程队列最大128个。虽然开了10个异步任务,

  • 但是只能同时并发执行5个,其他的任务都得等前面5个执行完后才继续执行,接着也是5次并发执行。

  • 3.1版本之后系统,默认是使用SERIAL_EXECUTOR串行任务执行,

  • 可以预料到异步任务将会是一个个顺序执行

  • 一个个线程按加入顺序同步执行的。也就是说,线程池中只有一个核心线程在工作,

  • 其他线程都要等之前的线程执行完才能执行

*/

private void initExecute() {

String url = “http://blog.csdn.net/huangxiaoguo1”;

task = new MyAsyncTask().execute(url);

}

/**

  • 自定义线程池执行,仅支持3.1以上系统

  • 使用默认提供的AsyncTask.THREAD_POOL_EXECUTOR线程池

  • 最大并发执行5个线程,后面的线程都只能等之前5个结束之后再执行

*/

private void initExecuteOnExecutor() {

String url = “http://blog.csdn.net/huangxiaoguo1”;

task = new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url);

}

/**

  • 自定义线程池,

  • 10个核心任务并发执行,而且缓存队列最多能够存储100个任务,

  • 当队列满了之后还可以创建10个运行线程

  • corePoolSize 核心线程池大小

  • maximumPoolSize 线程池最大容量大小

  • keepAliveTime 线程池空闲时,线程存活的时间

  • TimeUnit 时间单位

  • ThreadFactory 线程工厂

  • BlockingQueue任务队列

  • RejectedExecutionHandler 线程拒绝策略

*/

private void initMyExecute() {

String url = “http://blog.csdn.net/h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值