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

San*_*dey 5 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)
Run Code Online (Sandbox Code Playgroud)

码:

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();   
    }
}
Run Code Online (Sandbox Code Playgroud)

Dev*_*red 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);  
}
Run Code Online (Sandbox Code Playgroud)

它们Handler甚至会在主线程上为您运行该操作,无论如何都应该调用该代码。

华泰