Java runOnUiThread和Thread.sleep

Java runOnUiThread和Thread.sleep,java,android,sip,java-threads,Java,Android,Sip,Java Threads,我有一个单独类中的这个方法,调用结束时,ImageView的颜色从红色变为白色。示例代码如下: public void endOfCall(){ ((Activity)mContext).runOnUiThread(new Runnable(){ @Override public void run(){ TargetDetails.oncall.setVisibility(View.VISIBLE); Ta

我有一个单独类中的这个方法,调用结束时,ImageView的颜色从红色变为白色。示例代码如下:

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
}
当问题进入“if”状态时,我将Thread.sleep放在那里,问题就开始了。它会等待10秒钟,然后执行下面的代码

TargetDetails.oncall.setVisibility(View.VISIBLE);
TargetDetails.endcall.setVisibility(View.GONE);
我想我错过了一些关于线程的东西。睡眠。我只是想摆脱它,但我不确定除此之外还有其他选择。救命啊。谢谢。

用它来代替睡眠

因此,与其使用
if(true){….}
试试以下方法:

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

如果从uiThread调用
endOfCall
,它将休眠10秒,然后完成块并运行挂起的任务,例如可见性更改…为什么线程在这里休眠?这是进程的一部分。它休眠几秒(实际上不是10秒),然后进入另一个意图,再次调用。这就是为什么我把sleep放在可见性之后,因为我认为它会先处理可见性,然后再处理sleep。您提到该方法在单独的类中运行,但它也在单独的线程中运行吗?只有在另一个线程中处于可运行状态时,才应使用RunNuithRead。确定。我要试试这个。几分钟后会给你回复。谢谢,现在可以用了。但是有办法知道柜台吗?比如,如果它已经是1或2,等等?你可以扩展
Runnable
,这样它接受int作为构造函数值,并使用你的自定义Runnable代替headi,恐怕我没听清楚你在说什么。我是android编程的新手,所以我还是迷路了(