🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

강사님 강의 7:47초쯤 질문있습니다 (JoinActivity로 안넘어 가는 이유)

22.04.05 20:43 작성 조회수 172

0

7분 47초쯤 handler().postDelayed 를 주석처리 안했을때 joinActivity로 넘어가지않고 MainActivity로 넘어갔습니다.  

설명을 하지 않고 넘어가셔서 제가 인터넷에 activity 생명주기, firebase auth 검색해봐도 무엇때문에 MainActivity로 넘어가지 않는지  안나오더라구요.. 혹시 auth 서버 통신하는것 때문에 비동기적으로 if문 안에 있는것이 늦게 실행되서 joinActivity로 넘어가지 않는것인가요??? 아니면 생성주기 관련 문제인가요??? 답변 미리 감사드립니다.

 

답변 1

답변을 작성해보세요.

0

안녕하세요 

코드 위아래가 잘린 것 같은데

전체 코드와 함께

어떤 의도로 코드를 작성하셨는지 좀 더 자세히 알려주세요.

splash 화면 구성할때 강사님이 주석친 부분을 안지우셨을때 JoinActivity로 이동하지 않았는데요. 그 이후에 제가 주석처리한부분을  강사님이 동영상 강의에서 주석처리 하셨더니 정상적으로 joinActivity로 넘어 갔습니다.. 그런데 그것에 대한 설명이 없어서 인터넷 검색을 하였으나 그 이유(주석처리를 안하면 if문으로 분기가 안되는 것)를 알수가 없어서 질문을 하게 되었습니다.    좋은강의 감사합니다. 

 

 

 

 

 

 

 

package com.kim.mango_content

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class SplashActivity : AppCompatActivity() {


private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
auth = Firebase.auth
if(auth.currentUser?.uid == null) {
//회원가입이 안되있으므로 joinActivity
Handler().postDelayed({
startActivity(Intent(this,JoinActivity::class.java))
finish()
} , 3000)

} else {
//회원가입이 되어있으므로 MainActivity
Handler().postDelayed({
startActivity(Intent(this,MainActivity::class.java))
finish()
} , 3000)
}
/////////////이부분 주석처리 안할시 로그인 액티비티로 넘어가지 않음/////////////////////
/*
Handler().postDelayed({

startActivity(Intent(this,MainActivity::class.java))
finish()

} , 3000)
*/
}
}

 

 

 

아래 부분을 주석처리안하면 MainActivity로 가나요?

/////////////이부분 주석처리 안할시 로그인 액티비티로 넘어가지 않음/////////////////////
/*
Handler().postDelayed({

startActivity(Intent(this,MainActivity::class.java))
finish()

} , 3000)
*/

 

각 if else 그리고 주석처리한 부분까지 


디버깅을 하고 싶은 포인트마다 Log.d("MainActivity", "POINT 1 or 2 or 3 or 4") 라고 로그를 찍어서 어떤 순서로 동작되는지 확인해보시고 로그 결과를 공유해주세요.

네 강사님. 로그를 찍어보니 if문에 걸려도 밑쪽으로 계속 빌드가 되어서 결국에는 맨 밑에있는것만 실행이 되더라구요.  그런데 왜 이렇게 실행되는지 원인이 궁금합니다. (위에 코드 상관없이 밑에것이 실행하면 지우면 된다라는 단순한 이유 말고요 ㅠㅠ)

 

 

 

 

 

 

 

 

        Log.d("MainActivity", "POINT 0")
if(auth.currentUser?.uid == null) {
//회원가입이 안되있으므로 joinActivity
Log.d("MainActivity", "POINT 1")
Handler().postDelayed({
Log.d("MainActivity", "POINT 1-1")
startActivity(Intent(this,JoinActivity::class.java))
Log.d("MainActivity", "POINT 1-2")
finish()
Log.d("MainActivity", "POINT 1-3")
} , 1000)

Log.d("MainActivity", "POINT 2")
} else {
Log.d("MainActivity", "POINT 3")
//회원가입이 되어있으므로 MainActivity
Handler().postDelayed({
Log.d("MainActivity", "POINT 3-1")
startActivity(Intent(this,MainActivity::class.java))
finish()
Log.d("MainActivity", "POINT 3-2")
} , 1000)
Log.d("MainActivity", "POINT4")
}


/////////////이부분 주석처리 안할시 로그인 액티비티로 넘어가지 않음/////////////////////

Log.d("MainActivity", "POINT 5")
Handler().postDelayed({
Log.d("MainActivity", "POINT 5-1")
startActivity(Intent(this,MainActivity::class.java))
finish()
Log.d("MainActivity", "POINT 5-2")
} , 1000)
Log.d("MainActivity", "POINT 6")

}
}

 

 

 

주석처리 안했을때 로그입니다.

 

 

 

 

 

 

밑에는 주석처리 했을때 로그이구요..

 

답변 미리 감사드립니다

음.. 사실 handler를 저렇게 중복해서 사용하지 않는 경우가 일반적이긴 하지만

이거는 한번 코드를 돌려봐야 알 것 같은데

코드를 깃허브에 올리고 링크를 공유해주시겠어요?

채널톡 아이콘