Android:异步任务AsyncTask、execute、publishProgress、onProgressUpdate

简介:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public  class  MainActivity  extends  Activity  implements  OnClickListener
{
       
     private  TextView textView;
     private  ProgressBar progressBar;
       
     class  MyAsyncTask  extends  AsyncTask<String, Integer, String>
     {
         /**
          * 异步任务:AsyncTask<Params, Progress, Result>:只能子线程发消息到main线程
          * 1.Params:UI线程传过来的参数。可变参数影响asyncTask.execute()和doInBackground().
          * 2.Progress:发送消息的类型。可变参数影响onProgressUpdate()和publishProgress().
          * 3.Result:返回结果的类型。耗时操作doInBackground的返回结果传给执行之后onPostExecute的参数类型。
          *
          * 执行流程:
          * 1.onPreExecute()
          * 2.doInBackground()-->onProgressUpdate()
          * 3.onPostExecute()
          */
         @Override                     
         protected  void  onProgressUpdate(Integer... values) //执行操作中,发布进度后
         {
             progressBar.setProgress(values[ 0 ]); //每次更新进度条
         }
         @Override //实心三角:重写父类方法
         protected  void  onPreExecute() //执行之前
         {
             progressBar.setVisibility(View.VISIBLE); //点击之后,下载执行之前,设置进度条可见
         }
           
         @Override //空心三角:实现父类方法
         protected  String doInString...  params) //执行耗时操作
         {
             //在此方法执行耗时操作,耗时操作中发布进度,更新进度条
             //String result = download();
             for  ( int  i =  0 ; i <  10 ; i++)
             {
                 try
                 {
                     Thread.sleep( 1000 );
                     publishProgress(i *  10 ); //进度条每次更新10%,执行中创建新线程处理onProgressUpdate()
                 }
                 catch  (InterruptedException e)
                 {
                     e.printStackTrace();
                 }  
             }
             return  "下载完成!" ;
         }
           
         @Override
         protected  void  onPostExecute(String result) //执行之后
         {
             //在此方法执行main线程操作
             progressBar.setVisibility(View.GONE); //下载完成后,隐藏进度条
             textView.setText(result);
         }
     }
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
           
         findViewById(R.id.button1).setOnClickListener( this );
         textView = (TextView) findViewById(R.id.textView1);
         progressBar = (ProgressBar) findViewById(R.id.progressBar1);
     }
       
     @Override
     public  boolean  onCreateOptionsMenu(Menu menu)
     {
         getMenuInflater().inflate(R.menu.activity_main, menu);
         return  true ;
     }
     @Override
     public  void  onClick(View v)
     {
         switch  (v.getId())
         {
         case  R.id.button1:
             btnClick();
             break ;
           
         default :
             break ;
         }
     }
     private  void  btnClick() //创建AsyncTask对象,执行任务
     {
         MyAsyncTask asyncTask =  new  MyAsyncTask();
         asyncTask.execute( "http://www.google.com" );
         //可以通过此处传参数给AsyncTask,execute方法只能在UI线程里使用
     }
     private  String download() //下载,耗时操作
     {
         try
         {
             Thread.sleep( 3000 );
         }
         catch  (InterruptedException e)
         {
             e.printStackTrace();
         }
         return  "下载完成!" ;
     }
}




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1208441,如需转载请自行联系原作者
目录
相关文章
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
Linux Android开发 iOS开发
深入探索Android与iOS的多任务处理机制
在移动操作系统领域,Android和iOS各有千秋,尤其在多任务处理上展现出不同的设计理念和技术实现。本文将深入剖析两大平台在后台管理、资源分配及用户体验方面的策略差异,揭示它们如何平衡性能与电池寿命,为用户带来流畅而高效的操作体验。通过对比分析,我们不仅能够更好地理解各自系统的工作机制,还能为开发者优化应用提供参考。
|
算法 Linux 调度
深入探索安卓系统的多任务处理机制
【10月更文挑战第21天】 本文旨在为读者提供一个关于Android系统多任务处理机制的全面解析。我们将从Android操作系统的核心架构出发,探讨其如何管理多个应用程序的同时运行,包括进程调度、内存管理和电量优化等方面。通过深入分析,本文揭示了Android在处理多任务时所面临的挑战以及它如何通过创新的解决方案来提高用户体验和设备性能。
989 1
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
573 1
|
Android开发 Kotlin
Android面试题之Kotlin中如何实现串行和并行任务?
本文介绍了 Kotlin 中 `async` 和 `await` 在并发编程中的应用,包括并行与串行任务的处理方法。并通过示例代码展示了如何启动并收集异步任务的结果。
385 0
|
存储 Java 数据库连接
Android Java开发异步
【6月更文挑战第15天】
199 8
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
743 1
|
Android开发
40. 【Android教程】AsyncTask:异步任务
40. 【Android教程】AsyncTask:异步任务
609 2
|
Java Android开发 UED
android中ListView异步加载图片时的图片错位问题解决方案
android中ListView异步加载图片时的图片错位问题解决方案
|
8月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1484 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章