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

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

글쓴이 : hsw728 날짜 : 2018-09-27 (목) 22:00 조회 : 1158
글주소 : http://www.androidside.com/B49/170380
 
  스마트폰활용 전문교육센터
홈화면, 쉽게따라하는 동영상강의, 주제별 다양한강좌, 강의문의, SNS
www.smartleader.co.kr
  SBS아카데미컴퓨터학원전재성
디자인과정전문상담, 제휴대학할인, 강남컴퓨터학원, 개인맞춤형 컨설팅
sbs-designart.com
  SBS아카데미컴퓨터학원송강인
플래시전문디자인전문학원, 취업연계, 진로상담, 맞춤교육진행
sbsartcenter.net
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. 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
코드에 별다른 문제가 없다면,
혹시모르니, launchMode 관련하여 알아보세요.
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


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