Tag标签:
异步任务
-
001.
public
class
MainActivity
extends
Activity
implements
OnClickListener
002.
{
003.
004.
private
TextView textView;
005.
private
ProgressBar progressBar;
006.
007.
class
MyAsyncTask
extends
AsyncTask<String, Integer, String>
008.
{
009.
/**
010.
* 异步任务:AsyncTask<Params, Progress, Result>
011.
* 1.Params:UI线程传过来的参数。
012.
* 2.Progress:发布进度的类型。
013.
* 3.Result:返回结果的类型。耗时操作doInBackground的返回结果传给执行之后的参数类型。
014.
*
015.
* 执行流程:
016.
* 1.onPreExecute()
017.
* 2.doInBackground()-->onProgressUpdate()
018.
* 3.onPostExecute()
019.
*/
020.
@Override
021.
protected
void
onProgressUpdate(Integer... values)
//执行操作中,发布进度后
022.
{
023.
progressBar.setProgress(values[
0
]);
//每次更新进度条
024.
}
025.
@Override
026.
protected
void
onPreExecute()
//执行耗时操作之前处理UI线程事件
027.
{
028.
progressBar.setVisibility(View.VISIBLE);
//点击之后,下载执行之前,设置进度条可见
029.
}
030.
031.
@Override
032.
protected
String doInString... params)
//执行耗时操作
033.
{
034.
//在此方法执行耗时操作,耗时操作中发布进度,更新进度条
035.
//String result = download();
036.
for
(
int
i =
0
; i <
10
; i++)
037.
{
038.
try
039.
{
040.
Thread.sleep(
1000
);
041.
publishProgress(i *
10
);
//进度条每次更新10%,执行中创建新线程处理onProgressUpdate()
042.
}
043.
catch
(InterruptedException e)
044.
{
045.
e.printStackTrace();
046.
}
047.
048.
}
049.
return
"下载完成!"
;
050.
}
051.
052.
@Override
053.
protected
void
onPostExecute(String result)
//执行耗时操作之后处理UI线程事件
054.
{
055.
//在此方法执行main线程操作
056.
progressBar.setVisibility(View.GONE);
//下载完成后,隐藏进度条
057.
textView.setText(result);
058.
}
059.
060.
}
061.
@Override
062.
protected
void
onCreate(Bundle savedInstanceState)
063.
{
064.
super
.onCreate(savedInstanceState);
065.
setContentView(R.layout.activity_main);
066.
067.
findViewById(R.id.button1).setOnClickListener(
this
);
068.
textView = (TextView) findViewById(R.id.textView1);
069.
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
070.
}
071.
072.
@Override
073.
public
boolean
onCreateOptionsMenu(Menu menu)
074.
{
075.
getMenuInflater().inflate(R.menu.activity_main, menu);
076.
return
true
;
077.
}
078.
@Override
079.
public
void
onClick(View v)
080.
{
081.
switch
(v.getId())
082.
{
083.
case
R.id.button1:
084.
btnClick();
085.
break
;
086.
087.
default
:
088.
break
;
089.
}
090.
}
091.
private
void
btnClick()
//创建AsyncTask对象,执行任务
092.
{
093.
MyAsyncTask asyncTask =
new
MyAsyncTask();
094.
asyncTask.execute(
"http://www.google.com"
);//可以通过此处传参数给AsyncTask,execute方法只能在UI线程里使用
095.
}
096.
private
String download()
//下载,耗时操作
097.
{
098.
try
099.
{
100.
Thread.sleep(
3000
);
101.
}
102.
catch
(InterruptedException e)
103.
{
104.
e.printStackTrace();
105.
}
106.
return
"下载完成!"
;
107.
}
108.
}