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,如需转载请自行联系原作者