飞溅屏幕线程抛出错误。怎么解决? (包括代码和错误)

时间:2011-09-11 22:14:42

标签: android audio thread-safety splash-screen

我的启动画面出现了一些错误,我已经工作了一段时间,但无法弄明白。有没有更好的方法来计算我的启动画面而不是一个线程?我当前的帖子有什么问题?你能看到我的媒体播放器对象出现问题吗?

我发布了我的飞溅课的内容。希望我能就这些问题找到方向。这在我运行应用程序时有效,但我只是不想有错误。

-------------------------代码------------------ ------------

@Override
public void onCreate(Bundle savedInstanceState) {
 ......onCreate, hide window, and setting content view.......
        // Play Sound for startup
        mpSplash = MediaPlayer.create(this, R.raw.splashscream);
        mpSplash.start();
        final Splash splash = this;
        logoTimer = new Thread(){
        public void run(){
            try {
                synchronized(this){
                    // Wait given period of time or exit on touch
                    wait(4500);
                }
            } 
            catch(InterruptedException ex){ 
                ex.printStackTrace();
            }
            finish();
            mpSplash.stop();
            mpSplash.reset();
            //mpSplash.release();
            //mpSplash.release();
            // Run next activity
            Intent intent = new Intent();
            intent.setClass(splash, Game.class);
            startActivity(intent);
            stop();
        }
    };
    logoTimer.start();
}
// Splash screen touch events
@Override
public boolean onTouchEvent (MotionEvent evt)
{
    if(evt.getAction() == MotionEvent.ACTION_DOWN)
    {
        // Stop the introduction sounds
        mpSplash.stop();
        mpSplash.reset();
        //mpSplash.release();
        //mpSplash.release();
        synchronized(logoTimer){
            logoTimer.notifyAll();
        }
    }
    return true;
}

------------------------------错误------------- ----------------

09-11 21:50:04.644: ERROR/MediaPlayer(460): stop called in state 1
09-11 21:50:04.644: ERROR/MediaPlayer(460): error (-38, 0)
09-11 21:50:04.654: ERROR/global(460): Deprecated Thread methods are not supported.
09-11 21:50:04.654: ERROR/global(460): java.lang.UnsupportedOperationException
09-11 21:50:04.654: ERROR/global(460):     at java.lang.VMThread.stop(VMThread.java:85)
09-11 21:50:04.654: ERROR/global(460):     at java.lang.Thread.stop(Thread.java:1379)
09-11 21:50:04.654: ERROR/global(460):     at java.lang.Thread.stop(Thread.java:1344)
09-11 21:50:04.654: ERROR/global(460):     at com.ss.lastzombie.Splash$1.run(Splash.java:61)

谢谢!

1 个答案:

答案 0 :(得分:3)

不要在你的帖子中调用stop()。这是一种弃用的方法(它导致VM不稳定)并且不需要。 (当run()方法返回时,线程将退出)。您可能打算致电finish()以获取启动活动。这是有道理的。

为了形式起见,您可能希望在主线程而不是工作线程上调用startActivityfinish。为此,请使用runOnUIThread()发布Runnable,并从Runnable中调用这两个方法。