按下或回家时Android应用程序崩溃

时间:2012-09-02 18:45:47

标签: android

我的应用崩溃问题一直存在。当我按下后退按钮或主页按钮时,它有时会崩溃。有时我可以退出应用程序,当我回到它时它会崩溃。我认为这是因为线程即时使用。我在网上使用了一个教程,展示了如何使用图形。它使用Surface View和Thread。以下是GraphicalMenu.java的代码。

 class Panel extends SurfaceView implements SurfaceHolder.Callback{
    private TutorialThread _thread;

    public Panel(Context context) {

        super(context);

        getHolder().addCallback(this);
        _thread = new TutorialThread(getHolder(), this);
        setFocusable(true);

        // TODO Auto-generated constructor stub
    }

    @Override
    public void onDraw(Canvas canvas){

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        return true;
    }   


    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        _thread.setRunning(true);
        _thread.start();

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

         boolean retry = true;
            _thread.setRunning(false);
            while (retry) {
                try {
                    _thread.join();
                    retry = false;
                } catch (InterruptedException e) {
                    // we will try it again and again...
                }
            }

    }

}
class TutorialThread extends Thread {
    private SurfaceHolder _surfaceHolder;
    private Panel _panel;
    private boolean _run = false;

    public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) {
        _surfaceHolder = surfaceHolder;
        _panel = panel;
    }

    public void setRunning(boolean run) {
        _run = run;
    }

    @Override
    public void run() {
        Canvas c;
        while (_run) {
            c = null;
            try {
                c = _surfaceHolder.lockCanvas(null);
                synchronized (_surfaceHolder) {
                    _panel.onDraw(c);
                }
            } finally {
                // do this in a finally so that if an exception is thrown
                // during the above, we don't leave the Surface in an
                // inconsistent state
                if (c != null) {
                    _surfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }
    }
}

} 这是我在logcat中得到的错误和警告

09-01 10:41:39.690: E/global(17293):    at com.UWIgem.test2d.Splash$1.run(Splash.java:37)    
09-01 10:43:07.920: E/AndroidRuntime(17293):    at com.UWIgem.test2d.GraphicalMenu$Panel.surfaceCreated(GraphicalMenu.java:193)
09-01 10:43:07.940: W/ActivityManager(2799):   Force finishing activity com.UWIgem.test2d/.GraphicalMenu
09-01 10:43:08.475: W/ActivityManager(2799): Activity pause timeout for ActivityRecord{40757290 com.UWIgem.test2d/.GraphicalMenu}
09-01 10:43:17.879: W/ActivityManager(2799): Activity idle timeout for ActivityRecord{40757290 com.UWIgem.test2d/.GraphicalMenu}
09-01 10:43:18.525: W/WindowManager(2799): Force-removing child win Window{42377460 SurfaceView paused=false} from container Window{42313fe8 com.UWIgem.test2d/com.UWIgem.test2d.GraphicalMenu paused=false}
09-01 10:43:27.885: W/ActivityManager(2799): Activity destroy timeout for ActivityRecord{40757290 com.UWIgem.test2d/.GraphicalMenu}
09-01 10:47:36.930: E/AndroidRuntime(17445):    at com.UWIgem.test2d.GraphicalMenu$Panel.surfaceCreated(GraphicalMenu.java:193)
09-01 10:47:36.980: W/ActivityManager(2799):   Force finishing activity com.UWIgem.test2d/.GraphicalMenu
09-01 10:47:37.495: W/ActivityManager(2799): Activity pause timeout for ActivityRecord{41c1dcc8 com.UWIgem.test2d/.GraphicalMenu}
09-01 10:47:46.895: W/ActivityManager(2799): Activity idle timeout for ActivityRecord{41c1dcc8 com.UWIgem.test2d/.GraphicalMenu}
09-01 10:47:51.335: W/ActivityManager(2799): Activity idle timeout for ActivityRecord{41634868 com.UWIgem.test2d/.StartMenu}
09-01 10:47:52.259: W/ActivityManager(2799): Activity pause timeout for ActivityRecord{41634868 com.UWIgem.test2d/.StartMenu}
09-01 10:47:57.230: W/ActivityManager(2799): Activity destroy timeout for ActivityRecord{41c1dcc8 com.UWIgem.test2d/.GraphicalMenu}
09-01 10:52:41.354: W/WindowManager(2799): Force-removing child win Window{41a5dbb0 SurfaceView paused=false} from container Window{40b37498 com.UWIgem.test2d/com.UWIgem.test2d.GraphicalMenu paused=false}

我知道这是很多文字,但我总是看到人们要求logcat和这个网站上的代码。我不会覆盖onPause onStart或onStop。我需要在这些方法中加入什么?如果您有任何意见,我们将不胜感激。

0 个答案:

没有答案