我正在创建适用于SMS服务和 FTP 网络的应用程序。
如果用户未建立连接,它将尝试在30秒内重新连接。
我正在使用带有TextView的CountDownTimer来通知用户有关重新连接的时间。
要么成功要么会重新开始计算。
我的问题是,如果当活动在后台或屏幕被锁定时计数器重新启动,TextView会持续显示数字" 1" (它不会更新)直到计时器再次在前台重新启动(但是在没有计时器重启的情况下更新数字在后台或锁定中工作正常,我在前台服务中使用唤醒锁。)
当应用程序处于前台时,计数器再次重启(因此它不会停止计数),一切恢复正常,TextView从冻结的" 1"更新到" 30" 并开始倒计时到" 1" 。
我认为问题将在计数器线程和背景活动之间与UI进行沟通,但我对此一无所知。
我尝试了几件事:
onReume()
更新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();
}
}
};
答案 0 :(得分:0)
最后我找到了这个问题的解决方案。我没有意识到我在onPause()
方法中取消注册接收器。所以我不得不改变它并将广播注册到onResume()
并仅在onDestroy()
方法中取消注册。