Java runOnUiThread和Thread.sleep
我有一个单独类中的这个方法,调用结束时,ImageView的颜色从红色变为白色。示例代码如下: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
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编程的新手,所以我还是迷路了(