언젠가는 제가 답변을 할 수 있는 날이 오리라 믿으며 염치없이 또 질문 드립니다. 

아래 인텐트를 이용해 다른 액티비티를 실행시 생기는 오류에 대해서 질문을 드렸었습니다.

회색님 말씀대로 두 번째 액티비티 종료시 첫번째 액티비티에서 다시 쓰레드의 start()가 호출되어 생기는 문제더군요.

그래서 좀 일반적인 질문을 드리고 싶습니다. 지금 만들고 있는 프로그램은 거의 LunarLander와 JetBoy를 참고 하고 있습니다.

프로젝트는 액티비티 A와 B로 구성되어 있습니다. 각 액티비티들은 SurfaceView를 상속받은 AView와 BView를 포함하고 있습니다.

AView와 BView는 LunarLander 예제처럼 이미지 드로잉용 쓰레드를 사용합니다.

쉽게 예를 들자면 게임의 메뉴화면과 본화면이라고 생각하면 되겠습니다.

쓰레드의 시작 역시 LunarLander 예제처럼 처리하였습니다.

    public void surfaceCreated(SurfaceHolder arg0) {
        mThread.mRun = true;
        
        try {
            mThread.start();
        } catch (Exception e) {
                
        }
        
    }

    public void surfaceDestroyed(SurfaceHolder arg0) {
        mThread.mRun = false;

        boolean retry = true;
        while (retry) {
            try {
                mThread.join();
                retry = false;
            } catch (InterruptedException e) {
            }
        }        
    }

AView와 BView 모두 위와 같은 코드를 가지고 있습니다.

A에서 Intent를 통해 B를 실행시키고 B에서 게임 도중 뒤로가기 버튼을 누르니 A로 돌아는 오는데 이미 mThread.mRun = false로 run()이 종료된 상태이니 화면을 그리지는 않겠지요.

그래서 질문은 이렇게 UI 표시용 쓰레드를 가진 다수의 액티비티를 이용해 어플리케이션을 제작할 경우 뒤로가기 버튼을 눌러 앞의 액티비티로 돌아 갔을 때 문제 없이 해당 액티비티가 진행될 수 있도록 하는 방법입니다.

어떤 프로그래밍 패턴이 있을 것 같은데 LunarLander나 JetBoy 예제만으로는 감을 잡기가 힘드네요. 사실 Java 언어도 이번 프로젝트에서 처음 해보는 거라서 불쑥 Thread를 잡고 흔들자니 어설픔이 장난이 아닙니다.

부디 길 잃은 프로그래머 하나 구해주시길 간절히 부탁 드리겠습니다.