android的计时器怎么做 我觉得还是这样做,你还是设置10S刷新,只不过刷新的时候起个子线程去处理数据,然后数据处理完通过handler来通知UI更新(这一过程不考虑10s的限制),10s只是通知数据要去处理了,真正显示可能是在10S以后,然后显示更新成功了,再重启timer计时。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用Handler来做吧。有PostDelyed方法,参数可以这是等待时间数,如果想暂停或者干嘛的,只要将消息队列清空或者looper退出就可以了,这个要比Timer好多了,你可以随意控制 我做的Android实现秒表计时器的程序设计,包含源代码http://blog.csdn.net/ameyume/archive/2010/08/08/5797161.aspx用Timer实现的,楼主看看有没有作用? 我正在做录制视频的功能,里面用到了计时器,一秒刷新一次,其中bool是个标记,当为true时开始计时,要停止时,将bool赋值为false即可,至于重新计时,你在每次开始计时时将时间重置为0就可以了.代码如下,可以参考一下://开始录像 public void recorder(){ try { bool = true; myRecAudioFile = File.createTempFile(strTempFile,".mpg",myRecAudioDir); recorder = new MediaRecorder(); recorder.setPreviewDisplay(surfaceHolder.getSurface()); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置录音源为麦克风 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置输出格式为3gp recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //设置视频大小 recorder.setVideoSize(160,90); //每秒的帧数 recorder.setVideoFrameRate(5); //设置视频编码 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //设置音频编码 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(myRecAudioFile.getAbsolutePath()); recorder.prepare(); recorder.start(); tv01.setVisibility(View.VISIBLE); tv02.setVisibility(View.VISIBLE); tv03.setVisibility(View.VISIBLE); tv04.setVisibility(View.VISIBLE); tv05.setVisibility(View.VISIBLE); handler.postDelayed(task, 1000); recording = true; isStopRecord = false; } catch (IOException e) { e.printStackTrace(); } } //停止录像 public void stop(){ if (recorder == null){ return; } recorder.stop(); bool = false; tv01.setText(format(hour)); tv03.setText(format(minute)); tv05.setText(format(second)); recorder.release(); recording = false; recorder = null; mMakeTextToast("停止:" + myRecAudioFile.getName(),true); // 停止录象 isStopRecord = true; } //定时器设置,实现计时 private Handler handler = new Handler(); private Runnable task = new Runnable() { public void run() { if(bool){ handler.postDelayed(this, 1000); second ++; if(second < 60){ tv05.setText(format(second)); }else if(second < 3600){ minute = second / 60; second = second % 60; tv03.setText(format(minute)); tv05.setText(format(second)); }else{ hour = second / 3600; minute = (second % 3600) / 60; second = (second % 3600) % 60; tv01.setText(format(hour)); tv03.setText(format(minute)); tv05.setText(format(second)); } } } }; 如何取消AsyncTask正在执行的进程 线程的小问题, Android如何通过代码实现回复出厂设置 Android开发 本屌初学android 前来提问 关于background 八百里加急 想学android 但是不知道从什么开始啊 XMPP不能创建房间! sqlite内置查看器,用的什么控件? Android showAsDropDown对于相对布局中Button失效了 使用exclude多项目引入同一library不同版本报错 请问如何播放闹铃的铃声 Android
用Timer实现的,楼主看看有没有作用?
public void recorder(){
try {
bool = true;
myRecAudioFile = File.createTempFile(strTempFile,".mpg",myRecAudioDir);
recorder = new MediaRecorder();
recorder.setPreviewDisplay(surfaceHolder.getSurface());
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//设置录音源为麦克风
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置输出格式为3gp
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//设置视频大小
recorder.setVideoSize(160,90);
//每秒的帧数
recorder.setVideoFrameRate(5);
//设置视频编码
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//设置音频编码
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(myRecAudioFile.getAbsolutePath());
recorder.prepare();
recorder.start();
tv01.setVisibility(View.VISIBLE);
tv02.setVisibility(View.VISIBLE);
tv03.setVisibility(View.VISIBLE);
tv04.setVisibility(View.VISIBLE);
tv05.setVisibility(View.VISIBLE);
handler.postDelayed(task, 1000); recording = true;
isStopRecord = false;
} catch (IOException e) {
e.printStackTrace();
}
}
//停止录像
public void stop(){
if (recorder == null){
return;
}
recorder.stop(); bool = false; tv01.setText(format(hour));
tv03.setText(format(minute));
tv05.setText(format(second));
recorder.release();
recording = false;
recorder = null;
mMakeTextToast("停止:" + myRecAudioFile.getName(),true);
// 停止录象
isStopRecord = true;
}
//定时器设置,实现计时
private Handler handler = new Handler();
private Runnable task = new Runnable() {
public void run() {
if(bool){
handler.postDelayed(this, 1000);
second ++;
if(second < 60){
tv05.setText(format(second));
}else if(second < 3600){
minute = second / 60;
second = second % 60;
tv03.setText(format(minute));
tv05.setText(format(second));
}else{
hour = second / 3600;
minute = (second % 3600) / 60;
second = (second % 3600) % 60;
tv01.setText(format(hour));
tv03.setText(format(minute));
tv05.setText(format(second));
}
}
}
};