android 4.0.3版本中的线程返回错误

时间:2012-01-05 04:57:02

标签: android

我有一个问题,我在我的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();   
    }
}

4 个答案:

答案 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()的调用。这是不必要的。