多线程(AsyncTask异步任务处理execute()方法)
程序员文章站
2022-06-27 18:39:54
Handler使用比较复杂Handler和AsyncTask都是为了不阻塞主线程,且UI的 更新只能在主线程中完成,异步处理是不可避免的AsyncTask的特点是由系统来创建和删除执行任务的线程,并有效的管理它们开发者只要创建AsyncTask的子类,实现相应的方法。再创建AsyncTask子类的对象,并执行execute()方法就可以 了class MyTask extends AsyncTask { /** 运行在后...
- Handler使用比较复杂
- Handler和AsyncTask都是为了不阻塞主线程,且UI的 更新只能在主线程中完成,异步处理是不可避免的
- AsyncTask的特点是由系统来创建和删除执行任务的线程,并有效的管理它们
- 开发者只要创建AsyncTask的子类,实现相应的方法。再创建AsyncTask子类的对象,并执行execute()方法就可以 了
class MyTask extends AsyncTask <Void, Integer, Void>{
/**
运行在后台,相当于是Thread 中run方法
*运行在子线程中的方法
*/
@Override
protected Void doInBackground (Void. .. params) {
for(int i=0;i<=100;i++) {
publishProgress (i) ;
try {
Thread. sleep (1000) ;
} catch (InterruptedException e) {
e . printstackTrace () ;
}
}
return nu11 ;
}
/**
*进度指示的方法
*运行在主线程中,在这个方法中可以直接更新控件的属性
*/
@Override
protected void onProgressUpdate (Integer... values) {
int num =values [0] ;
tvTest . setText ("num: "+num) ;
super . onProgressUpdate (values) ;
}
/**
*运行在主线程中,当后台运行结束,自动调用的方法
*/
@Override
protected void onPostExecute (Void result) {
Toast . makeText (MainActivity. this, "子线程运行结束",Toast. LENGTH LONG) .show() ;
super . onPostExecute (result) ;
}
}
执行:
new MyTask() . execute () ;
读取文件示例:
class ReadFileTask extends AsyncTask <File, Void, String>{
@Override
protected String doInBackground (File. . . params) {
return read (params [0]) ;
}
@Override
protected void onPostExecute (String result) {
etContent. setText (result) ;
super . onPostExecute (result) ;
}
private String read(File file) {
stringBuilder sb=new StringBuilder() ;
BufferedReader bre nul1 ;
try {
br =new BufferedReader (new InputstreamReader (new FileInputstream (file)) )
String line =br . readLine () ;
while (line!=nu1l) {
sb . append (line+"\n") ;
line = br. readLine() ;
}
return sb.toString();
} catch (FileNotFoundException e) {
e.printstackTrace() ;
} catch(IOException e){
e.printstackTrace () ;
}finally{
try {
if (br!=null) {
br.close() ;
}
} catch (IOException e) {
e. printstackTrace () ;
}
return null;
}
}
执行:
btnRead . setonClickListener (new View . OnClickListener () {
@Override
public void onClick (View v) {
//执行子线程,完成读取文件工作
File file=new File (Environment. getExternalStorageDirectory() , "test. txt") ;
new ReadFileTask () . execute (file) ;
}
}) ;
本文地址:https://blog.csdn.net/qq_43496675/article/details/107904983