当需要单个后台异步处理的时候用AsyncTask比较方便,如果线程任务比较多还是用Handler吧。
时间紧迫,不详细写了,以后再补
实现步骤:
1.自定义一个类继承AsyncTask< Params,Progress,Result >
Params:输入的参数
Progress:更新的进度,一般用来更新UI的进度信息
Result:是执行后的返回结果
2.重写doInBackground()方法。一些需要异步后台操作的方法写在里面
3.重写onPostExecute()方法,当doInBackground()完成后,系统会自动调用此方法,将doInBackground()的返回参数传给此方法。换句话说就是当你的异步操作完成之后就自动调用这个方法,你可以写一些后续操作,这个方法可以改变UI线程,而doInBackground()不可以。
4.在主线程里创建自定义类的对象,调用exetute()方法。
Demo:
public class Async_2 extends Activity implements View.OnClickListener {
private Button button;
private EditText editText;
private TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.thread);
init();
initlisten();
}
private void init(){
editText=(EditText) findViewById(R.id.e_1);
button=(Button) findViewById(R.id.b_1);
textView=(TextView)findViewById(R.id.t_1);
}
private void initlisten(){
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
CalTask task=new CalTask();
task.execute(Integer.parseInt(editText.getText().toString()));//开启异步任务
}
/**
* 自定义异步任务类
* */
class CalTask extends AsyncTask<Integer,Integer,ArrayList>{
//执行异步任务操作的方法
@Override
protected ArrayList doInBackground(Integer... params) {
ArrayList<Integer> list=new ArrayList<Integer>();
outer:
for(int i=2;i<=params[0];i++){
for (int j=2;j<=Math.sqrt(i);j++){
if (i!=2&&i%j==0){
continue outer;
}
}
list.add(i);
}
return list;
}
//任务完成后调用的方法
@Override
protected void onPostExecute(ArrayList arrayList) {
textView.setText(arrayList.toString());
}
}
}