/** * 异步任务的三个泛型参数: * 1、调用execute方法时传入的参数类型,输入参数 * 2、progressUpdate的方法入参 * 3、异步任务的返回结果类型 doInBackground的返回类型,doPostExecute的方法入参 * * 使用异步任务的一些注意事项 * 1、一个异步任务只能执行一次,多次执行的话,则会跑出异常 * 2、必须在UI线程中创建异步任务示例 * 3、必须在UI线程中调用execute方法 */ public class AsyncTaskTest extends Activity { private TextView tv_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_async_task_test); //初始化视图控件 tv_show = (TextView) findViewById(R.id.tv_show); } /** * 开始异步任务 * @param view */ public void startAsyncTask(View view) throws Exception { DownloadAsyncTask asyncTask = new DownloadAsyncTask(this); asyncTask.execute(new URL("http://baidu.com")); } public class DownloadAsyncTask extends AsyncTask<URL,Integer,Void>{ private Context mContext; private ProgressDialog progressDialog = null; public DownloadAsyncTask(Context context){ this.mContext = context; } /** * 开始执行后台任务前执行, * 一般做一些初始化工作,比如:初始化对话框 */ @Override protected void onPreExecute() { progressDialog = new ProgressDialog(mContext); progressDialog.setTitle("任务执行中"); progressDialog.setMessage("任务正在执行中,请耐心等待...."); //设置用户不能取消进度条对话框 progressDialog.setCancelable(false); progressDialog.setMax(100); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.show(); } /** * 执行后台任务 * @param params * @return */ @Override protected Void doInBackground(URL... params) { int i = 1; for (; i < 100; i++) { try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } publishProgress(i); } return null; } /** * 更新进度信息 * @param values */ @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); tv_show.setText(values[0] + ""); progressDialog.setProgress(values[0]); } /** * 后台操作执行完后做一些操作 * @param aVoid */ @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); progressDialog.dismiss(); progressDialog = null; } } }
时间: 2024-12-08 08:10:17