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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值