Android Timer计时器如何在TimerTask的run进程中更新UI组件

在我改一个声音播放和录音的APP时,想让该APP使用Timer计时器自动每录5秒存储一次。

所以需要使用Timer计时器来完成。

但是我希望在使用该APP时能在APP界面内提示当前是第几次录音。

刚开始使用Toast.makeText();方法来显示字符串,但是程序运行时会出现异常终止。

在网上查了之后发现子线程中不能更新主界面的UI组件,要使用Handle来更新,但是网上很多Handle例子看起来很复杂。

最后找到了一种简单粗暴的方法来完成这个需求。

下面这段代码是我的整个TimerTask要做的所有事情:

主要更新TextView只有几行代码,该代码下面单独给出。

class myTaskStart extends TimerTask{
        @Override
    public void run(){
            //开始录音
                System.out.println("启动程序");

                //count为一个全局变量,该全局变量来控制run的运行次数
                if(count<33){
                    count=count+1;
                }
                else {
                    this.cancel();
                    System.exit(0);
                }
                //结束使用count控制run的运行次数


                //开始更新TextView里面的字符串
            textView.post(new Runnable() {
                @Override
                public void run() {
                    textView.setText("start"+count);
                }
            });
                //结束更新TextView里面的字符串

                player.start();
                String fileName = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
                audioRecorder.createDefaultAudio(fileName);    // status = Status.STATUS_READY;
                audioRecorder.startRecord(null);

              //等待录音
            try {
                Thread.sleep(5000);
            }
            catch (InterruptedException e)
            {
                Toast.makeText(getApplicationContext(),"异常",Toast.LENGTH_LONG).show();
            }

            //停止录音
            System.out.println("停止录音啊啊啊啊");
            audioRecorder.stopRecord();
            player.stop();

            textView.post(new Runnable() {
                @Override
                public void run() {
                    textView.setText("end");
                }
            });
            try {
                player.prepare();
            }
            catch (IOException e)
            {
                System.out.println("player初始化失败!");
            }
        }
}

更新TextView的代码:

            //开始更新TextView里面的字符串
            textView.post(new Runnable() {
                @Override
                public void run() {
                    textView.setText("start"+count);
                }
            });
            //结束更新TextView里面的字符串

 

 

 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值