忍者ブログ

うろのなか(工事中)

現在工事中です。色々実験してるのでデザインが大きく崩れます。

【Android】finish()で終了してからもう1度起動でクラッシュの対処法

先日アップロードした妖夢百人斬りにおいて
プログラムからActivity.finish()を呼び出した場合その直後に起動した時にゲームがクラッシュするという不具合があったので修正を試みることにしました

このゲームではタイトルでバックキーを2回押した時と、ゲーム終了のボタンを押した時の2種類の終了方法があるのですが、
ゲーム終了のボタンから終了した場合にクラッシュが発生してしまいます

どちらの処理も呼び出している関数は同じなのに動作が違っているということは
スレッド関係が怪しいかと思い、Activity.finish()をUiスレッド内で処理するように変更したら
見事にバグが治りました

[2015/03/20:追記]
スレッドが原因みたいな事をいってしまいましたが、関係ありませんでした。
バックキーを押して終了した場合はKeyEventから終了処理が呼び出されますが、
ゲーム終了ボタンをタッチした場合はAndEngineのクリックイベントの途中で終了処理が呼び出されてしまうというのがクラッシュの原因のようです。
なのでアップデート処理中に終了処理を呼び出すようにすればどのスレッドでも大丈夫だと思います。(終了処理にAndEngineを使用した処理が入る場合はAndEngineのアップデートスレッドを使用した方がよさそうです)

Uiスレッド内でActivity.finish()を行う方法は以下のとおりです

Activity.runOnUiThread( new Runnable() {
	@Override
	public void run() {
		Activity.finish();	
	}
});

拍手[0回]

PR