총 게시물 39,226건, 최근 2 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

홈 화면을 갔다오면 앱이 재실행이 되어버립니다.

글쓴이 : hsw728 날짜 : 2018-09-27 (목) 22:00 조회 : 3757
글주소 : http://www.androidside.com/B49/170380
 
  스마트폰활용 전문교육센터
홈화면, 쉽게따라하는 동영상강의, 주제별 다양한강좌, 강의문의, SNS
www.smartleader.co.kr
  2018년 기대작, 라스트킬
2018년 RPG 기대작! 생생한 전투 현장, 강력한 한방으로 몬스터를 처치하라
last.noblegames.kr
  카툰 무협 RPG, 귀검
카툰 속에서 리얼한 전쟁 한판! 스토리에 한번 빠지고, 캐릭터에 두번 빠지고!
gb.topgame.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

@Override
protected void onPause()
{
   super.onPause();

   if(mGameView != null)
      mGameView.gameStop();
   // 홈 화면으로 나갈 때 일시정지

   musicPause();
}

@Override
protected void onResume()
{
   super.onResume();

   if(mGameView != null && !mIsRunnable && !mDialogState)
      mGameView.gameStart();
   // 홈 화면 갔다온 뒤 다시 진행

   musicStart();
}

onPause() 코드와 onResume() 코드는 위와 같습니다.
홈화면을 갔다오면 앱이 그냥 아예 재실행이 되어버립니다.
근데 문제는, 모든 기기에서 이런 문제가 발생하는 게 아니라는 겁니다.

제대로 되는 기기가 있고, 그렇지 않은 기기가 있는데.
코드를 어떻게 수정해야 할지 도저히 감이 오질 않아서 이렇게 질문 올립니다.

gameStart() 함수와 gameStop() 함수는 다음과 같습니다.

public void gameStart() // 게임 스타트 함수
{
   // 게임을 진행할 스레드
   Thread thread = new Thread(new Runnable()
   {
      @Override
      public void run()
      {
         try Thread.sleep(1000); }
         catch (InterruptedException e) e.printStackTrace(); }
         // 혹시 아직 준비가 되지 않은 객체가 있을 경우를 대비해 1초 정도 기다린다.

         if(mMusic)
            mBGM.start();

         while(true)
         {
            long startTime = System.currentTimeMillis();
            // 스레드 슬립 타임

            synchronized(this)
            {
               if(!mIsRunnable)
                  break;
               // mIsRunnable의 값이 false일 경우 이 while문을 빠져나간다. (스레드 종료)

               if(!mReadyObjectCheck)
                  readyObject1(mScreenWidth, mScreenHeight);

               mCanvas = lockCanvas();

               if(mCanvas == null)
                  continue;
               // mCanvas가 아직 null일 경우 컨티뉴

               mCanvas.drawBitmap(mBackground, 0, 0, null);
               // 배경화면 이미지를 담은 mBackground를 배경화면으로 지정

               ...
               ...
               ...
               ( 더 자세한 코드를 적고 싶었으나, 양이 적지 않은 데다가 아무리 생각해도
               제 질문의 문제점에 영향을 줄만한 코드가 아니라고 생각되어서 제외했습니다.
               양이 많아서 어디부터 어떻게 적어야 할지도 감이 안와서 ... 혹시 필요하다면
               댓글로 바로 적겠습니다. )

               unlockCanvasAndPost(mCanvas);
            }

            long endTime = mSleepTime - System.currentTimeMillis()+startTime;
            // 스레드 슬립 타임

            if(endTime > 0)
            {
               try Thread.sleep(endTime); // endTime 쓰레드를 sleep시킨다. }
               catch(InterruptedException e) {}
            }
         }
      }
   });

   mIsRunnable = true;
   thread.start();

   mTask = new TimerTask()
   {
      @Override
      public void run()
      {
         runOnUiThread(new Runnable()
         {
            @Override
            public void run()
            {
               mCountText(String.valueOf(mCountTimer);
            }
         });

         if(mCountTimer != 0)
            mCountTimer --;
         // 카운트 타이머를 1초에 1씩 차감한다.
      }
   };

   mTimer = new Timer();
   mTimer.schedule(mTask, 1000, 1000);
}

public void gameStop() // 게임스탑 함수
{
   mIsRunnable = false;

   mTask.cancel();
   mTimer.cancel();
}

.



질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

인시즌 2018-09-28 (금) 16:11 추천추천 1 반대 0
코드에 별다른 문제가 없다면,
혹시모르니, launchMode 관련하여 알아보세요.
인시즌 2018-09-28 (금) 16:11
베플로 선택된 게시물입니다.
코드에 별다른 문제가 없다면,
혹시모르니, launchMode 관련하여 알아보세요.
댓글주소 추천 1 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기