アプリがクラッシュするという問題が発生しています。戻るボタンやホームボタンを押すと時々クラッシュします。また、アプリを終了することもあり、アプリに戻るとクラッシュします。使用している糸のせいだと思います。グラフィックの使用方法を示すチュートリアルをオンラインで使用しました。サーフェス ビューとスレッドを使用します。以下は、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 をオーバーライドしません。これらのメソッドに何を入れる必要がありますか? ご意見がありましたら、大歓迎です。