Android на Resume не вызывается - PullRequest
       39

Android на Resume не вызывается

0 голосов
/ 17 апреля 2011

Я занимаюсь разработкой приложения для Android и хочу, чтобы оно приостанавливало музыку при нажатии кнопки «Домой» (onPause).Это работает нормально, но затем, когда я пытаюсь снова запустить игру, onResume, onRestart, onStart, onRestoreInstanceState и onCreate никогда не вызываются, и это говорит мне, что приложение не отвечает.В LogCat не показано никаких исключений ... Так что я понятия не имею, что происходит.Кто-нибудь есть какие-либо предложения относительно того, почему это может иметь место?

-EDIT- Я получаю эту ошибку в LogCat, когда приложение делает паузу:

04-16 20: 09: 32.659: ОШИБКА / ActivityManager (66): Причина: широковещательная передача намерениякод:

    public void onPause() {
    super.onPause();            
    panel.mediaPlayer.pause();
    panel.thread.running=false;
}

Основной поток приложения:

        public void run() {
        running = true;
        while(running) {
            //new Canvas.
            Canvas c = null;
            //Update information
            update();
            //Draw everything to screen
            try {
                //Gets the canvas from the surfaceHolder.
                c = surfaceHolder.lockCanvas(null);
                synchronized(surfaceHolder) {
                    //draw to the canvas                    
                    doDraw(c);
                    try {
                        Thread.sleep(gameSpeed);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            } finally {
                if (c != null) {
                    surfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }

mediaPlayer:

            mediaPlayer = new MediaPlayer();
    sublime = context.getResources().openRawResourceFd(R.raw.sublime);

    try {
        mediaPlayer.setLooping(true);
        mediaPlayer.setDataSource(sublime.getFileDescriptor(), sublime.getStartOffset(), sublime.getLength());
        mediaPlayer.prepare();

    } catch (IllegalArgumentException e1) {

    } catch (IllegalStateException e1) {

    } catch (IOException e1) {

    } 
    mediaPlayer.start();

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Когда вы получаете сообщение об ошибке «приложение не отвечает», это означает, что ваша активность заняла слишком много времени в главном потоке приложения.Определите всю работу, которую вы выполняете в главном потоке приложения, и перенесите медленный материал в фоновый поток или AsyncTask.

0 голосов
/ 18 апреля 2011

Я думаю, что я могу знать, в чем заключается моя ошибка: он запускает какой-то ненужный код, когда onSizeChanged вызывается для SurfaceView (что, я думаю, может произойти, когда вы приостанавливаете Activity и что-то еще появляется для просмотра) ... I ' Я проверю это. Спасибо всем!

...