Android 第三章 第二节 多线程 ( AsyncTask )

Phemia ·
更新时间:2024-09-21
· 607 次阅读

文章目录# 简介# 异步任务执行时对应的四个方法:# onPreExecute():# doInBackground(Params...):# onProgressUpdate(Progress...):一次呼叫# onPostExecute(Result):当后台计算结束时,调用UI线程后台,# 异步任务的创建:# AsyncTask的创建 # 简介

AsyncTask能够适当地、简单地用于UI线程,这个类准许执行后台操作。
异步任务的定义是一个在后台线程上运行,其结果是在UI线程上显示的一种类。

还是会创建线程的,不过是封装了起来,看不到罢了。

public class MainActivity extends AppCompatActivity { //实现进度条 private ProgressBar progressBar1; 进度条id private int jindu; 自定义的整数,表示进度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progressBar1=findViewById(R.id.activity_main_progressbar1); //绑定id //初始化进度条 progressBar1.setMax(100); //启动异步任务 MyAsyncTask myAsyncTask=new MyAsyncTask(); myAsyncTask.execute(); }//--------------------------------------------------------------------------------onCreate //定义异步任务类,继承自AsyncTask(抽象类)类 private class MyAsyncTask extends AsyncTask{ @Override//四个方法中必须重写的方法,其他方法可以选择实现------/-/-/-/-/-/-/-/-/-/-/-/ protected Object doInBackground(Object[] objects) { //线程等待 while(true){ try{ Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }//执行四大方法之一的onProgressUpdate方法 if(jindu==80){//进度100的时候跳出 break; } publishProgress(); } return null; } @Override//只有这个方法需要手动调用,在四大方法之一的doInBackground中调用 protected void onProgressUpdate(Object[] values) { jindu=progressBar1.getProgress();//int型jindu==进度条id的get方法。 progressBar1.setProgress(jindu+20);//进度条+20 super.onProgressUpdate(values); Log.e("1111111111111111111",jindu+""); } }//------------------------------------------------------------------AsyncTaks }//------------------------------------------------------------------------------------MainActivity # 异步任务的创建:

AsyncTask必须被子类继承。
• 子类至少重写其中的doInBackground(Params…)方法,一般还会重写onPostExecute(Result)。

任务实例必须创建在UI线程。

execute(Prams…)必须在UI线程上调用。

不要手动调用onPreExecute(), onPostExecute(),
doInBackground(), onProgressUpdate()。

不能在doInBackground(Params… params)中更改UI界面。

# AsyncTask的创建 • 异步任务中的三个泛型: - Params:任务执行器需要的数据类型。 - Progress:后台计算中使用的进度单位数据类型。 - Result:后台计算返回结果的数据类型。 上一个基础上实现了泛型的应用 方法细讲,参数的传递与类型 public class MainActivity extends AppCompatActivity { //实现进度条 private ProgressBar progressBar1; private int jindu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progressBar1=findViewById(R.id.activity_main_progressbar1); //初始化进度条 progressBar1.setMax(100); //启动异步任务 MyAsyncTask myAsyncTask=new MyAsyncTask(); //myAsyncTask.execute(); myAsyncTask.execute("自定义参数,访问的网络地址");//参数的值会传入doInBackgroud方法 }//--------------------------------------------------------------------------------onCreate //定义异步任务类,继承自AsyncTask(抽象类)类 //如果不指定泛型类型的话,方法中所有形参与返回值类型都是object private class MyAsyncTask extends AsyncTask{ //用了泛型,下面的方法的参数也需要相应的变换 ------------------------------------------------ @Override//四个方法中必须重写的方法,其他方法可以选择实现------/-/-/-/-/-/-/-/-/-/-/-/ protected String doInBackground(String[] objects) { Log.e("主线程传递的数据",objects[0]);//参数放入了数组里面 //线程等待 while(true){ try{ Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }//执行四大方法之一的onProgressUpdate方法 if(jindu==80){//进度100的时候跳出 break; } publishProgress(20);//可以没有参数,有参数的话,参数会出现在onProgressUpdate方法参数的values【0】位置 } // publishProgress();//会执行onProgressUpdate方法 //return的参数会传入onPostExecute方法中 return "doInBackground执行的结果"; } ------------------------------------------------ @Override//只有这个方法需要手动调用,在四大方法之一的doInBackground中调用 protected void onProgressUpdate(Integer[] values) { jindu=progressBar1.getProgress();//int型jindu==进度条id的get方法。 progressBar1.setProgress(jindu+20);//进度条+20 super.onProgressUpdate(values); Log.e("1111111111111111111",jindu+""); Log.e("onProgressUpdate参数的值",values[0] + ""); } ------------------------------------------------ @Override protected void onPostExecute(String o) { Log.e("onPostExecute参数的值",o);//o是doInBackgroud方法的返回值 super.onPostExecute(o); } }//------------------------------------------------------------------AsyncTaks }//------------------------------------------------------------------------------------MainActivity 本菜鸟今天也要努力变强 原创文章 65获赞 3访问量 4344 关注 私信 展开阅读全文
作者:本菜鸟今天也要努力变强



asynctask 多线程 线程 Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号