我创建了一个可以使用我们的SIP服务器进行调用的应用程序。现在我想要做的是向用户显示他的通话持续了多久。我的脚本实际上正在工作,但我注意到通话时间越长,我的应用程序就会变慢。下面是我的代码Handler.postDelayed导致延迟
Handler h = new Handler(Looper.getMainLooper());
_isOnCall = true;
long time = 0;
int x = 0;
while(_isOnCall) {
if (_isOnCall){
final int counter = 1 + x;
time += 1000;
h.postDelayed(new Runnable() {
@Override
public void run() {
(TargetDetailsActivity.this).runOnUiThread(new Runnable() {
@Override
public void run() {
final int seconds = counter % 60;
final int minutes = (counter % 3600)/60;
final int hours = counter/3600;
callcounter.post(new Runnable() {
@Override
public void run() {
callcounter.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
}
});
}
});
}
}, time);
x++;
}else{
break;
}
}
的片段基本上什么代码所做的仅仅是计数秒/分钟/小时他一直在打电话。当他挂断电话时,我拨打以下代码:
_isOnCall = false;
h.removeCallbacksAndMessages(null);
我不确定是什么原因导致了延迟。帮帮我!谢谢。
UPDATE
我能够通过使用定时器利用高尔文的建议,使这一工作。这是我以供将来参考代码:
private Timer myTimer;
private int counter_time=0;
public void onCallEstablished() {
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}
}, 0, 1000);
}
private void TimerMethod()
{
this.runOnUiThread(Timer_Tick);
}
private Runnable Timer_Tick = new Runnable() {
public void run() {
counter_time++;
int seconds = counter_time % 60;
int minutes = (counter_time % 3600)/60;
int hours = counter_time/3600;
callcounter.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
}
};
public void releaseCall(){
if(myTimer != null){
myTimer.cancel();
myTimer.purge();
counter_time = 0;
}
}
是while循环在UI线程上运行? – Blackbelt
@Blackbelt uhm抱歉,我不完全知道你对UI线程的意思。我对android非常陌生。 :( – user3360031
@ user3360031:发布完整的代码,这段代码是否写在UI线程中? –