I've been working on a little game for some time now.  The initial
Activity instantiates a Surfaceview (MonsterView) with one thread.  I
recently added a couple new activities to display high scores and
stuff.

I haven't been able to duplicate my error on the emulator, but on my
phone I can get it to crash sporadically.  From the initial activity I
start either of my other activities, then push Back.  If I repeat this
enough, my initial activity eventually crashes; sometimes it happens
on the second "Back", sometimes it takes a dozen tries.  When it does,
its just a nullpointer exception on the initial activity

10-22 09:15:01.139: DEBUG/KeyInputQueue(81): DebugMonitor keycode=4
value=1
10-22 09:15:01.248: DEBUG/KeyInputQueue(81): DebugMonitor keycode=4
value=0
10-22 09:52:08.138: WARN/dalvikvm(13010): threadid=15: thread exiting
with uncaught exception (group=0x40013140)
10-22 09:52:08.138: ERROR/AndroidRuntime(13010): Uncaught handler:
thread Thread-8 exiting due to uncaught exception
10-22 09:52:08.158: ERROR/AndroidRuntime(13010):
java.lang.NullPointerException
10-22 09:52:08.158: ERROR/AndroidRuntime(13010):     at
com.prescience.android.monsterbaiter.MonsterView$MonsterThread.doDraw
(MonsterView.java:2162)
10-22 09:52:08.158: ERROR/AndroidRuntime(13010):     at
com.prescience.android.monsterbaiter.MonsterView$MonsterThread.run
(MonsterView.java:1696)


So the random nature of it made me think it's a memory leak.  I'm not
sure how to begin diagnosing that, but that's where I was leaning.  I
put break points on most of my lifecycle functions to make sure I'm
not creating something repeatedly, but I could have missed something.
My call to fire the new activities look like

        Intent i = new Intent(this, MBScoreBoard.class);
        startActivityForResult(i, ACTIVITY_SCORES);

And in my Run(), its interesting that it seems to be crashing on Draw
() but it gets through Update() ok...

...

                Looper.prepare();

            while (IsRunning) {
                Canvas c = null;
                try {
                    c = mSurfaceHolder.lockCanvas(null);
                    synchronized (mSurfaceHolder) {

                        update();
                        if(IsSurfaceCreated)
                        {
                        doDraw(c);
                        }
                    }
                } finally {
                    if (c != null) {
                        mSurfaceHolder.unlockCanvasAndPost(c);
                    }
                }
            }
            Looper.loop();

...


For what it's worth, it seems much easier to reproduce when I'm not in
Debug mode.

Any thoughts or suggestions would be much appreciated.  I'll be back
if I figure something out.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to