最近在看异步问题,异步过程中最重要的方法是AsyncTask<Void,Void,Void>类这个类有三个类型,里面可以为其他的类如String等这里就以Void类为例:
第一个Void是AsyncTask类中复写方法doInBackground的参数类型,这个参数一般是数组,
第二个Void类型是onProgressUpdate的参数类型,一般也是数组,
第三个Void类型是doInBackground返回值类型也是最后执行的onPostExcute参数类型。
下面是自己做的有关简单异步应用:
首先是Main函数:
package com.zzy.demo1;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class Demo1Activity extends Activity {
/** Called when the activity is first created. */
private TextView textView=null;
private Button button=null;
private ProgressBar progressBar=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.textView=(TextView)findViewById(R.id.text);
this.button=(Button)findViewById(R.id.button);
this.progressBar=(ProgressBar)findViewById(R.id.gress1);
this.button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//设置对象并将textView,progressBar 传递过去
asynctask task=new asynctask(textView, progressBar);
//执行execute方法
task.execute(1000);
}
});
}
}
然后是异步操作的设置:
package com.zzy.demo1;
import android.R.integer;
import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView;
publicclass asynctask extends AsyncTask<Integer, Integer, String>
{
//这里会首先执行onPreExcute方法
//然后执行doInBackground方法
private TextView textView=null;
private ProgressBar progressBar=null;
public asynctask(TextView textView,ProgressBar progressBar){
this.textView=textView;
this.progressBar=progressBar;
}
@Override
//后台运行不会对当前UI产生影响
protected String doInBackground(Integer... params)
{
// TODO Auto-generated method stub
for(int i=0;i<100;i+=10)
{
network.operator(i);
onProgressUpdate(i);
}
returnnull;
}
//最后运行这个函数
protectedvoid onPostExecute(String result)
{
textView.setText("GAME OVER");
}
//传递过来首先运行这个函数
protectedvoid onPreExecute()
{
textView.setText("GAME BEGIN");
}
//设置进度条
protectedvoid onProgressUpdate(Integer... params)
{
progressBar.setProgress(params[0]);
}
}
最后是执行线程部分操作的代码:
package com.zzy.demo1;
import android.R.integer;
publicclass network extends Thread
{
publicstaticvoid operator(int i)
{
try
{
System.out.println("这是第"+i+"次休眠");
Thread.sleep(2000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
总体来说 不是多难只是要理解他的操作过程以及函数的实现。