【发布时间】:2014-06-05 09:14:05
【问题描述】:
我正在创建适用于 SMS 服务和 FTP 网络的应用程序。
如果用户没有建立连接,它将在 30 秒后尝试重新连接。
我正在使用带有 TextView 的 CountDownTimer 来通知用户重新连接的剩余时间。
要么成功,要么重新开始计数。
我的问题是,如果计数器在 Activity 在后台或屏幕被锁定时重新启动,TextView 会一直显示数字 "1"(它不会更新),直到计时器在前台再次重新启动(但在没有定时器重启的情况下更新数字在后台或锁定中工作正常,我在前台服务中使用唤醒锁)。
当应用程序处于前台时,计数器再次重新启动(因此它不会停止计数)后,一切恢复正常,TextView 从冻结的“1”更新为“30”并开始倒计时“1”。
我认为问题将出在计数器线程和后台活动与 UI 之间的通信中,但我对此一无所知。
我尝试了几种方法,例如:
- 为毫秒创建 setter 和 getter 并在每个毫秒内更新它们
打勾,然后尝试从
onReume()更新textview,没有用。 - 在定时器内部为TextView创建局部变量,在
onTick()内部初始化它和 尝试从那里更新文本,也没有用。
感谢大家的帮助,有什么建议我都会采纳的。
与问题相关的部分代码:
private CountDownTimer cdt = null;
private final TextView getTextView_ActivityMainMenu_Timer(){
return (TextView) findViewById(R.id.ActivityMainMenu_TextView_Timer);
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getBooleanExtra("KEY_FAILED", false)){
cdt = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
getTextView_ActivityMainMenu_Timer().setText("" + millisUntilFinished / 1000);
}
public void onFinish() {
;
}
}
.start();
}
else
{
if(cdt != null)
cdt.cancel();
}
}
};
【问题讨论】:
标签: java android multithreading timer android-activity