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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
2月前
|
Android开发 Kotlin
Android面试题之Kotlin中如何实现串行和并行任务?
本文介绍了 Kotlin 中 `async` 和 `await` 在并发编程中的应用,包括并行与串行任务的处理方法。并通过示例代码展示了如何启动并收集异步任务的结果。
28 0
|
3月前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
86 1
|
6月前
|
存储 Java 数据库连接
Android Java开发异步
【6月更文挑战第15天】
|
6月前
|
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对象并发送异步请求。
215 1
|
6月前
|
Android开发
40. 【Android教程】AsyncTask:异步任务
40. 【Android教程】AsyncTask:异步任务
137 2
|
7月前
|
Android开发
Android中的多线程及AsyncTask的引入,最终入职阿里
Android中的多线程及AsyncTask的引入,最终入职阿里
|
8天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
13天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
15天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。