メモメモ
現在作ってるゲームがACTIVITYを複数枚行き来していて、
その内のひとつがSurfaceViewを使っている。
終了させようとするとヌルポエラーがっ(´・ω・`)
検索して
Activityを終了させるのはfinish()、
全体を終了させるのはmoveTaskToBack(true);
プロセスまで終了させるのは
android.os.Process.killProcess(android.os.Process.myPid());
↑でも非推奨らしい。
と分かった。でも、どの方法を試してもエラーが出るー。
と困ってたらThreadの終了の仕方と、
他ACTIVITYでの処理の仕方が間違ってたー。
thread = null
は終了方法でなく「もういらない宣言」なんだって。
そうだったのかー('ω')
SurfaceViewを入れてるACTIVITYのonPauseに
public void onPause(){
super.onPause();
ActionView.finishLoop();
}
と書いてLoop終了メソッドを呼び出す。
そのループ終了のメソッドは
public static void finishLoop() {
synchronized (thread) {
// ループを抜ける
looper = false;
}
try{
// スレッドの終了を待つ
thread.join();
} catch( InterruptedException ex ){
Thread.currentThread().interrupt();
}
}
としました。
参考にさせて頂いたどこかの企業様のBlogがURL分からなくなってしもた。
見つけたら追記しまする。
それで各ACTIVITYに戻るボタンを押したらダイアログを表示させるように。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
new AlertDialog.Builder(Activity.this)
.setMessage("終了してもいいですか?")
.setCancelable(false)
.setPositiveButton("はい",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MySurfaceView.finishLoop();
moveTaskToBack(true);
}})
.setNegativeButton("いいえ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();}}).show();
return true;
}
return false;
}
SurfaceViewを含んでいないActivityにはmoveTaskToBack(true);だけ書いた。
(最初は全部にMySurfaceViewにあるthreadを終了させる文も書いてしまったので、
もうないよ、とNullPointerが出ていたようです。。。。恥ずかしい。)
これで私の望み通りに完成!
うれしー(*´ω`*)
でもどうやら面倒がってstatic変数を多用してしまったせいか
メモリを使いすぎかもしれない・・・・・。
だもんで、現在清書も兼ねて、なるだけstatic変数を使わないよう移行中!
来週中には出来そうです(∩´∀`)∩~♥わーい
0 件のコメント:
コメントを投稿