当前位置: 移动技术网 > IT编程>开发语言>Java > 多线程(AsyncTask异步任务处理execute()方法)

多线程(AsyncTask异步任务处理execute()方法)

2020年08月11日  | 移动技术网IT编程  | 我要评论
  • 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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网