欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

多线程(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