프로젝트 중에 이상한 현상을 격었다.
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()); // 앱 프로세스 종료
}
}
'Android(Java)' 카테고리의 다른 글
[Java] TextView 일부 글자만 색/크기/스타일 변경하기 (0) | 2024.03.28 |
---|---|
[Java] CustomDialog 간단하게 사용하기(버튼 한개/두개) (0) | 2024.03.28 |
[Android] Mac OS 안드로이드 스튜디오에 내장된 JRE에 인증서를 추가 (0) | 2024.03.26 |
[Java] 다른 앱 실행시 설치 유무 확인 (0) | 2024.03.25 |
[Java] 폴더블 앞뒤 화면전환시 웹뷰 상태 유지 (0) | 2024.03.22 |