launching the browser is a heavy context switch that isn't customizable, 

while WebViews don't share state with the browser and add maintenance overhead.

이런 단점들을 해결하기 위해 나온게 Chrome Custom Tab이다.

웹뷰와 CCT 중 뭘 써야할지 감이 잘 안올 때는,

간단하게 쓸 때.

launchUrl만 호출해도 된다.


val builder = CustomTabsIntent.Builder()

val customTabsIntent =

customTabsIntent.launchUrl(context, uri)


속도를 좀 더 빠르게 하고 싶다? warm up을 하기 위해 bind를 사용하자.

CCT가 종료되면 이전 Activity의 onResume으로 들어온다. 그래서 따로 콜백은 안써도 됨.

주의 사항


Activity com.tistory.umbum.github_issue_widget_app.LoginActivity has leaked ServiceConnection com.tistory.umbum.github_issue_widget_app.helper.CustomTabsHelperKt$openCustomTab$connection$1@ef19e01 that was originally bound here


이런 에러가 뜨는건,


CustomTabsClient.bindCustomTabsService(context, CUSTOM_TAB_PACKAGE_NAME, connection)


이렇게 bind해놓은 상태에서 다시 bind를 해버리면 발생한다.

onDestroy에서 unbind해주어야 함. 그래서 mClient, mConnection 둘 다 멤버 변수로 저장해 두어야 한다.




참고 자료 : best practices, 왜 bind를 해야 하는지 등