프로젝트 중에 이상한 현상을 격었다. 

MainActivity -> SplashActivity 호출 로직을 돌다 특정 조건이면 앱을 SplashActivity 에서 완전 종료 시키는 코드를 사용했다.

 

SplashActivity 에서 다이얼로그 버튼 클릭으로 종료시켰는데 종료됬다가 자동으로 다시 실행됬다.. 좀비냐.... ㅜㅜ

android.os.Process.killProcess(android.os.Process.myPid());

 

예상으로는 OS에서 비정상 종료로 판단해서 다시 실행해 준걸로 보이는데 맞는지는 모른다..

 

이문제 해결방법

addFlags를 사용해서 MainActivity에서 onNewIntent로 Extra값을 받아 앱을 종료했더니 잘된다.

// SplashActivity 클래스
					..... 생략 .....
View.OnClickListener exitListener = new View.OnClickListener() {
    public void onClick(View v) {
        mCustomDialog.dismiss();

          //finish();
          //moveTaskToBack(true);
          //finishAndRemoveTask();
          //android.os.Process.killProcess(android.os.Process.myPid());
        /*
        SplashActivity 에서 killProcess 해도 앱이 재실행되는 현상때문에 MainActivity 통해서 종료시킴
        OS에서 비정상 종료로 인식해서 재실행 하는걸로 예상됨.
         */
        Intent intent = new Intent(SplashActivity.this, MainActivity.class);

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra("kill_process", true);
        startActivity(intent);

    }
};

 

// MainActivity Class
					..... 생략 .....
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    
    boolean kill_process = intent.getBooleanExtra("kill_process", false);
    if(kill_process == true){
        // finish() 만 할 경우 재실행시 기존 엑티비티가 남아 있는 경우가 있음.
        // finish();
        moveTaskToBack(true);    // 테스크를 백그라운드로 이동
        finishAndRemoveTask();   // 엑티비티 종료 + 테스크 리스트에서 지우기
        android.os.Process.killProcess(android.os.Process.myPid()); // 앱 프로세스 종료
    }
}

+ Recent posts