我正在制作一个简单的Android应用程序应该有一个计数器,从60秒到0秒。我有一个想法如何去做,但我不确定它是否是最聪明的方法。而且我不确定如何让它在代码中运行。
思想: 在.xml文件中,我添加了textView。我会创建扩展Service的MyService类,它将由OnCreate函数中的.java文件调用(因为我希望计数立即开始)。 MyService将每秒更改textView的内容(我将有一个int计数器,它将每秒减少,然后textView的文本将被更改)。
有没有更好的方法呢?
这是MyService类:
public class MyService extends Service {
//for timer:
int counter = 0;
static final int UPDATE_INTERVAL = 1000;
private Timer timer = new Timer();
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
doSomethingRepeatedly();
return START_STICKY;
}
private void doSomethingRepeatedly() {
timer.scheduleAtFixedRate( new TimerTask() {
public void run() {
//code for changing the content
}
}, 0, UPDATE_INTERVAL);
}
@Override
public void onDestroy() {
super.onDestroy();
//za timer
if (timer != null){
timer.cancel();
}
}
}
我是否必须将此代码放在单独的.java文件中?
我不确定如何编写代码来更改textView的内容,因为我不确定我是否可以调用textView的id,因为它位于单独的文件中?
这些是启动服务的功能:
public void startService(View view) {
startService(new Intent(getBaseContext(), MyService.class));
}
public void stopService(View view) {
stopService(new Intent(getBaseContext(), MyService.class));
}
我必须把它们放在哪里?
答案 0 :(得分:3)
安排倒计时,直到将来的时间,定期 沿途的间隔通知。显示30的示例 文本字段中的第二个倒计时:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
对onTick(long)的调用将同步到此对象 在前一次回调之前不会发生对onTick(long)的调用 完成。这只是执行时的相关内容 onTick(long)需要一段时间才能执行,这很重要 与倒计时间隔相比。