안드로이드 앱 개발기 #29 - 잊고 있었던 앱 재시작 샘플 코드

시작하며...

예전에 앱 재시작 코드 관련하여 포스트를 작성한 적이 있었는데요. 샘플 코드를 만들어 놓고 잊어 먹고 있었습니다. 코드 작성은 다 했구요. readme.md 문서 작성하고 GitHub에 올리는 일만 남았습니다. 그 전에 작성한 코드를 간단히 공유해볼까 합니다.


샘플 앱

이번 샘플 앱은 처음에 시작 화면을 보여주고, 1.5초 후 메인 화면으로 이동합니다. 메인 화면에는 하얀색 배경에 RESTART 버튼이 있어요. 이를 클릭하면, 앱은 재시작하여 시작 화면을 다시 보여줍니다. 1.5초 후 다시 메인으로 이동하지요.

시작 화면

screenshot-01.png

메인 화면

screenshot-02.png


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개의 메소드를 실행하면 되는 것으로 이해하고 있습니다.


지난 안드로이드 앱 개발기

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.029
BTC 56596.99
ETH 2394.78
USDT 1.00
SBD 2.32