我有一个问题,我在我的Android应用程序中有一个启动画面,我使用线程等待8秒,它在1.6,2.1,2.2,2.3.3,3.0,3.1运行良好,但返回错误当我想在4.0.3版本的android中运行时,我不知道为什么?请建议我正确的解决方案。下面我提到了错误堆栈和我的代码。
错误堆栈:
01-05 10:16:06.417: E/AndroidRuntime(589): FATAL EXCEPTION: Thread-75
01-05 10:16:06.417: E/AndroidRuntime(589): java.lang.UnsupportedOperationException
01-05 10:16:06.417: E/AndroidRuntime(589): at java.lang.Thread.stop(Thread.java:1076)
01-05 10:16:06.417: E/AndroidRuntime(589): at java.lang.Thread.stop(Thread.java:1063)
01-05 10:16:06.417: E/AndroidRuntime(589): at com.shipface.common.SplashScreen$1.run(SplashScreen.java:34)
代码:
public class SplashScreen extends Activity {
/** Called when the activity is first created. */
Thread splash;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
splash = new Thread(){
@Override
public void run(){
try {
synchronized(this){
// Wait given period of time or exit on touch
wait(4000);
Intent intent = new Intent(SplashScreen.this,HomeActivity.class);
startActivity(intent);
finish();
}
}
catch(InterruptedException ex){
}
finish();
stop();
}
};
splash.start();
}
}
答案 0 :(得分:3)
每个人都已经说过异常来自哪里(Thread.stop()
),所以我会留下一个......
到目前为止,最简单的方法是不为此目的创建Thread
;即使AsyncTask
过度也是如此。这就是Handler
为(或CountDownTimer
创建的内容,但Handler
更清晰,IMO)。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Handler handler = new Handler();
Runnable action = new Runnable(){
@Override
public void run(){
Intent intent = new Intent(SplashScreen.this,HomeActivity.class);
startActivity(intent);
finish();
}
};
handler.postDelayed(action, 8000);
}
Handler
甚至会为您在主线程上运行操作,无论如何都应该调用该代码。
HTH
答案 1 :(得分:1)
Thread.stop是不推荐使用的方法,这是您获得异常的原因。它将适用于带有警告的较低版本。尝试使用AsyncTask而不是线程。它们更安全
答案 2 :(得分:1)
我不知道为什么你需要stop()
线程,stop()
已被弃用,你想要停止你可以使用的线程thread_instance.interrupt()
。但是,这只会这样做,
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent(SplashScreen.this,HomeActivity.class);
startActivity(intent);
SplashScreen.this.finish();
}
}).start();
答案 3 :(得分:1)
stop()方法已弃用
在早期版本中,UnsupportedOperationException
被忽略了,你可以在日志中看到它。但在4.0.3中,它被认为是致命的例外
您可以在代码中删除对stop()的调用。这是不必要的。