2015-04-15 3 views
4

У меня есть этот метод из отдельного класса, в котором при завершении вызова цвет моего ImageView изменяется с красного на белый. Пример кода ниже:Java runOnUiThread и Thread.sleep

public void endOfCall(){ 

    ((Activity)mContext).runOnUiThread(new Runnable(){ 
     @Override 
     public void run(){ 
      TargetDetails.oncall.setVisibility(View.VISIBLE); 
      TargetDetails.endcall.setVisibility(View.GONE); 
     } 
    }); 

    try{ 
     call.endCall(); 
    }catch (SipException se) {} 

    call.close(); 

    //this is just a representation; not the actual code 
    if(true){ 
     Thread.sleep(10000); 
    } 

    //new intent here 
} 

Проблема начинается, когда она переходит в состояние «если», где я помещаю Thread.sleep. Он ждет 10 секунд, прежде чем ниже код запускается на выполнение

TargetDetails.oncall.setVisibility(View.VISIBLE); 
TargetDetails.endcall.setVisibility(View.GONE); 

Я думаю, что я что-то пропустил в отношении Thread.sleep. Я просто хочу избавиться от него, но я не уверен в альтернативе. Помогите. Благодарю.

+0

если вы звоните 'endOfCall' из uiThread, it'll сна в течение 10 секунд, а затем закончить блок и запустить незавершенные задачи, такие как изменения видимости ... – eduyayo

+1

Почему здесь спит? – ToYonos

+0

Это часть процесса .. он спит в течение нескольких секунд (не совсем 10 секунд), а затем переходит к другому намерению, когда он снова делает вызов. Вот почему я поставил сон после видимости, потому что думал, что сначала обработает видимость, затем сон. – user3360031

ответ

5

Используйте Handler вместо того, чтобы положить нить спать.

Так вместо того, чтобы ваш if(true) {.....} попробовать это:

Handler h = new Handler(); 
h.postDelayed(new Runnable() { 
    @Override public void run() { 
     //new intent here 
    } 
}, 10000); 
+0

ok. попробуем это. вернется к вам через несколько минут. Благодарю. – user3360031

+0

теперь работает. но есть ли способ узнать счетчик? например, если это уже 1 или 2 и т. д.? – user3360031

+0

Вы можете расширить 'Runnable', чтобы он принимал int как значение конструктора и вместо этого использовал свой собственный Runnable. –