안드로이드 앱 개발기 #29 - 잊고 있었던 앱 재시작 샘플 코드
시작하며...
예전에 앱 재시작 코드 관련하여 포스트를 작성한 적이 있었는데요. 샘플 코드를 만들어 놓고 잊어 먹고 있었습니다. 코드 작성은 다 했구요. readme.md 문서 작성하고 GitHub에 올리는 일만 남았습니다. 그 전에 작성한 코드를 간단히 공유해볼까 합니다.
샘플 앱
이번 샘플 앱은 처음에 시작 화면을 보여주고, 1.5초 후 메인 화면으로 이동합니다. 메인 화면에는 하얀색 배경에 RESTART 버튼이 있어요. 이를 클릭하면, 앱은 재시작하여 시작 화면을 다시 보여줍니다. 1.5초 후 다시 메인으로 이동하지요.
시작 화면
메인 화면
SplashActivity
시작 화면 담당하는 액티비티이구요. 1.5초 후 MainActivity를 실행하며, 자신을 종료시킵니다. 이걸 하지 않으면, 메인 화면에서 back 버튼을 누르면 시작 화면이 다시 보이는 문제가 있습니다.
class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
supportActionBar?.hide()
Handler(Looper.getMainLooper()).postDelayed(
{
startActivity(Intent(this, MainActivity::class.java))
finish()
},
1500
)
}
}
MainActivity
메인 화면을 담당하는 액티비티이구요. RESTART 버튼 클릭하면, restartApp() 메소드를 실행하여 앱을 재시작합니다. 이것은 어느 액티비티에서든 편리하게 실행하기 위해 Activity 클래스 확장 메소드로 정의하였습니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.btnRestart).setOnClickListener {
restartApp()
}
}
}
restartApp() 메소드
이 메소드는 현재 태스크의 모든 액티비티들을 종료하고 이 앱의 최초 시작 액티비티를 실행합니다.
fun Activity.restartApp() {
finishAffinity()
startActivity(packageManager.getLaunchIntentForPackage(packageName))
}
앱 재시작 방법을 설명한 블로그들이 여럿 있는데요. 어떤 것이 가장 적합한지 찾는데 애를 좀 먹었습니다. 지금은 위와 같이 2개의 메소드를 실행하면 되는 것으로 이해하고 있습니다.
지난 안드로이드 앱 개발기
- #28 - 문자열 리소스 파일 strings.xml 어떻게 작성하면 좋을까?
- #27 - 클린 아키텍처에서 domain 모듈
- #26 - 클린 아키텍처 구현을 위한 모듈 구성
- #25 - 스팀 관련 샘플 코드 만들면서 잘못한 점
- #24 - 시작 화면 구성 요소 식별하기
- #23 - 프로젝트 초기 화면 구성부터 대략적으로...
- #22 - Kotlin 코드로 JavaScript 코드를 실행할 수 있을까?
- #21 - 실습 도중 발생한 오류: A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
- #20 - 클립보드에 텍스트 복사하는 함수 만들어 보기 (Kotlin)
- #19 - 데이터 바인딩 적용했으나 UI 자동 업데이트 되지 않는 문제
- #18 - 에뮬레이터에서 토스트 안 보이는 문제 (1)
- #17 - 유닛 테스트를 실행할 수 없는 문제 해결
- #16 - 잘 되던 유닛 테스트를 실행할 수 없는 문제
- #15 - 앱 재시작 코드
- #14 - Fragment 사용시 간혹 발생할 수 있는 Fragment not attached to Activity 문제
- #13 - Retrofit2 활용 서버로부터 받을 데이터 유형 JsonElement (JSONObject 사용 불가)
- #12 - Glide 활용하여 이미지 다운로드 받는 코드
- #11 - 처리할 수 없는 예외/크래쉬 발생시 앱 재시작하기
- #10 - 안드로이드 스튜디오 업그레이드 후 단축키가 안되면? (맥북)
- #9 - LiveData 객체에 동일 데이터 설정하면 observer 실행되는지 확인 목적의 샘플 프로젝트
- #8 - 안드로이드 스튜디오에서 빌드시 발생하는 Build Tools revision 31.0.0 오류
- #7 - 'UGC(사용자 생성 콘텐츠) 정책 미준수'로 심사 거절
- #6 - 뷰에 역마진 적용 불가시 translationX, translationY 속성 사용하기
- #5 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #4 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #3 - 무한 롤링 배너 만드는 법을 찾았으나, 높이를 wrap_content로 지정이 안 먹히는 문제점이...
- #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류
- #1 - 페이스북 로그인 연동시 발생했던 문제들
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.