일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 앱 꺼졌을 때 푸시 데이터 저장
- FlutterView MethodChannel
- 앱 백그라운드 푸시 데이터 저장
- 스위프트 UserDefaults
- Swift flutterview
- silent push
- 안드로이드 바로가기
- flutter rotate
- 노티피케이션 익스텐션
- 스위프트 카메라
- Flutter NativeView
- swift 문자
- 안드로이드 앨범
- 스위프트
- 스위프트 푸시
- swift autolayout
- 플러터 뷰 컨트롤러
- 안드로이드 숏컷
- 안드로이드 FCM
- native flutter view
- flutter 회전
- 스위프트 웹뷰
- 안드로이드 에러
- Flutter UIKitView MethodChannel
- 스위프트 앨범
- 스위프트 테이블 뷰 셀
- swift sms
- NotificationService Extension
- Swift flutterviewcontroller
- 푸시 데이터 저장
- Today
- Total
Things take time
[Android] 현재 실행중인 앱 종료하기 본문
[로직]
기본적으로 앱을 종료하는 명령어는 여러 개가 있다.
나같은 경우에는 기본적으로
android.os.Process.killProcess(android.os.Process.myPid());
이 명령어를 통해서 앱을 종료시킨다.
그러나 혹은 finish()로 종료시켜도 같은 효과는 나타나는데, 문제점은
현재 띄워진 액티비티가 2개 이상인 경우에는, 해당 옵션은 제일 위에 있는 액티비티만을 종료시킨다.
그러므로 새 액티비티가 띄워져 있을 때, 새 액티비티 뿐 아니라 루트 액티비티까지 같이 종료하고 싶을 때 사용하면 되겠다.
finishAffinity(); System.runFinalization(); System.exit(0);
Activity.finishAffinity() : 해당 앱의 루트 액티비티를 종료시킨다. (API 16미만은 ActivityCompat.finishAffinity())
System.runFinalization() : 간단히 말해 현재 작업중인 쓰레드가 다 종료되면, 종료 시키라는 명령어
System.exit(0) : 현재 액티비티를 종료시킨다.
이렇게 되면, 루트 & 현재 액티비티를 종료하고 메모리까지 GC에게 처리하게 하므로 깔끔하게 앱이 초기화된다.
물론 백그라운드 버튼울 누르면 앱은 살아있게 되나, 백그라운드에 있는 앱을 클릭하면 루트 액티비티의 OnCreate() 부터 시작되게 된다.
나는 앱이 외부에서 특정 변수를 가져오면 루트에서 새 액티비티를 띄우라고 되어있던 로직에서, 뒤로 가기를 눌렀을 땐 앱을 깔끔히 초기화 할때 사용한다.
출처
https://developer.android.com/reference/java/lang/System.html#runFinalization()
https://blog.asamaru.net/2015/12/15/android-app-finish/
'Android(기능)' 카테고리의 다른 글
[Android] 최근 실행중인 앱 목록(Recent App)에서 앱을 실행함을 감지하는 방법 (0) | 2018.05.11 |
---|---|
[Android] Activity를 스택에 쌓이지 않게 하는 방법 (0) | 2018.05.08 |
[Android] Activity의 LaunchMode에 대하여 (4) | 2018.02.22 |
[Android] Webview 쿠키, 캐시, 히스토리 등 웹데이터 삭제 (0) | 2017.12.20 |
[Android] 오레오(8.0) 업데이트 및 노티피케이션 채널(Notification Channel) (0) | 2017.12.01 |