AsyncTaskDemo

异步任务,是Handler的简化版,不需要实现多个方法;
本质上依然是由Handler实现,其内部封装了一个简单的线程池
但也因此不建议进行叫复杂的耗时操作如网络请求等

创建一个内部类继承于AsyncTask
public class MainActivity extends AppCompatActivity {

    private TextView tv;
    MyAsyncTask task;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        task=new MyAsyncTask();
        //调用AsyncTask的execute()开始异步任务,但是注意新建的任务只能执行一次,否则会出现异常
        task.execute("");
    }

    //三种泛型类型分别代表“启动任务执行的输入参数”、“后台任务执行的进度”、“后台计算结果的类型”。
    // 在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用Java.lang.Void类型代替。
    public class MyAsyncTask extends AsyncTask<String, Integer, String> {
        //在后台任务开始前执行的ui操作,如弹出一个进度提示框
        protected void onPreExecute() {
            tv.setText("准备好.... 憋气100秒!");
        }
        int x=0;
        //耗时操作
        protected String doInBackground(String... strings) {
            while(x<100){
                try {
                    Thread.sleep(1000);
                    x++;
                    //publishProgress(第二个泛型),来调用onProgressUpdate()方法,更新提示信息
                    publishProgress(x);
                } catch (InterruptedException e) {
                }
            }
            return (x+"");
        }
        //更新进度条更更改ui的操作
        @Override
        protected void onProgressUpdate(Integer... values) {
           int value= values[0];
            tv.setText(value+"");
        }
        //后台任务完成后执行,比如取消进度条
        @Override
        protected void onPostExecute(String s) {
            tv.setText("游戏结束");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值