Ошибки выбрасывания нити заставки. Как решить? (Код и ошибки включены) - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть некоторые ошибки с заставкой, над которыми я работал некоторое время и не могу понять. Есть ли лучший способ рассчитать время моего заставки, чем поток? Что не так с моей текущей веткой? Вы видите проблему с моим объектом медиаплеера?

Я опубликовал информацию о своем классе всплесков. Надеюсь, я смогу получить некоторые указания по этим вопросам. Это работает, когда я запускаю приложение, но я просто не хочу, чтобы были ошибки.

------------------------- Код ------------------ ------------

@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 Ответ

3 голосов
/ 12 сентября 2011

Не звоните stop() в вашей теме. Это устаревший метод (он ведет к нестабильности в ВМ) и не нужен. (Поток завершится, когда вернется метод run()). Вы, вероятно, намеревались вызвать finish() для всплеска активности. Это имело бы смысл.

Просто ради формы, вы можете вызвать startActivity и finish в главном потоке, а не в рабочем потоке. Для этого опубликуйте Runnable, используя runOnUIThread(), и вызовите эти два метода из Runnable.

...