package your.splash.namespace;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.TextView;
public class SplashScreenActivity extends Activity{
protected boolean _active = true;
protected int _splashTime=1500; //The timeout
TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) findViewById(R.id.stext);
Thread splashThread = new Thread()
{
@Override
public void run()
{
try
{
int waited=0;
//the thread will stop if _active==false and bigger than _splashTime
while(_active && (waited < _splashTime))
{
sleep(100);
if(_active)
{
waited +=100;
}
}
}catch(InterruptedException e)
{
}
finally
{
tv.setText("how"); //when it is timeout, the text will change to this one
}
}
};
splashThread.start();
}
//When user press screen, it set _active to false to stop the thread
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
_active = false;
}
return true;
}
}
我只想在线程超时时将Text“设置为TextView”。该程序可以在Eclipse中运行。但是,当线程超时时,弹出错误消息“不幸的是,SplashScreen已停止”显示,然后程序退出(停止)后按下OK按钮。怎么了?怎么解决?
答案 0 :(得分:1)
tv.setText("how"); is in onon UI thread...
你不能在其他UI线程中做与UI相关的工作......
finally
{
runOnUiThread(new Runnable() {
public void run() {
tv.setText("how");
}
});
}