AsyncTask
Asynctask是android对java线程的一个封装,通常用于后台线程和UI线程的交互。直接看下面实例:
主UI Activity中执行:
mprogressbar = (ProgressBar)findViewById(R.id.progressBar1); mtextview = (TextView)findViewById(R.id.textView1); mbutton = (Button)findViewById(R.id.button1); mprogressbar.setMax(10); mbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //AsyncTask只能在UI主线程中调用,且不能多次调用 MyTask task = new MyTask(mtextview, mprogressbar); task.execute("fredric"); } });
自定义AsyncTask如下:
//AsyncTask是一个抽象类,其中定义三种泛型类型//AsyncTask<Params, Progress, Result>,其中:
//Params对应调用时传入的参数(即执行doInBackGroud时的参数,由execute传入),下例为String;
//Progress为中间进度条调用的参数(即执行onProgressUpdate时的参数,下例为Integer)
//Result为执行结束后的调用的参数(即执行onPostExecute时的参数)
public class MyTask extends AsyncTask<String, Integer, String> { private TextView mtextview; private ProgressBar mprogressbar; public MyTask(TextView mtextview, ProgressBar mprogressbar) { super(); this.mtextview = mtextview; this.mprogressbar = mprogressbar; }
//AyncTask的耗时操作定义在此函数中
//其中publishProgress可以出发执行onProgressUpdats
//该方法在onPreExecute后执行
//该方法不运行在UI线程中,因此不能对UI进行操作,下面三个方法都可以,实例中操作了文本和进度条
//UI线程在执行doInBackground后无法再向该线程发送消息; @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub int i = 0; for(i = 0; i < 10; i++){ try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return i + "&" + params[0]; } @Override protected void onPreExecute() { mtextview.setText("开始执行线程"); } @Override protected void onProgressUpdate(Integer... values) { mprogressbar.setProgress(values[0]); } @Override protected void onPostExecute(String result) { mtextview.setText(result); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)