Android -- AsyncTask实例
2010-09-10 00:39:00 来源:WEB开发网2.doInBackground(Params...), onPreExecute()完成执行,立刻调用后台线程,这步被用于执行较长时间的后台计算。异步任务的参数也被传到这步。计算的结果必须在这步返回,将传回到上一步。
3.onProgressUpdate(Progress...),一次呼叫 publishProgress(Progress...)后调用 UI线程,执行的时机没有定义。这个方法用于在用户界面显示进度,当后台计算还在进行时。例如:这个方法可以被用于一个进度条动画或在文本域显示日志。
4.onPostExecute(Result), 当后台计算结束时,调用 UI线程。后台计算结果作为一个参数传递到这步。
线程规则:
有一些线程规则必须去遵守,这个类才会正确的工作:
*任务实例 必须创建在 UI线程
* execute(Params...)必须在 UI线程上调用
*不要手动调用 onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)
*任务会执行仅一次(假如有第二个尝试去执行,将抛出一个异常)
下面上一实例(程序 启动的初始化进度条):
项目结构(如图):
public class Double extends Activity {
public ProgressBar pBar;
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pBar = (ProgressBar) findViewById(R.id.progress_bar);
//线程规则二:execute(Params...)必须在UI线程上调用
new AsyncLoader().execute((Void)null);
}
public void initProgress() {
pBar.setProgress(0);
//这里可以做一些初始化工作,我就不麻烦写了,写几个变态的for循环算了
for (int i = 0; i < 100; i++) {
System.out.println("***********" + i + "*************");
}
pBar.setProgress(30);
//这里可以做一些初始化工作,我就不麻烦写了,写几个变态的for循环算了
for (int i = 0; i < 100; i++) {
System.out.println("***********" + i + "*************");
更多精彩
赞助商链接