Chrome Custom Tabs
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 중 뭘 써야할지 감이 잘 안올 때는,
https://stackoverflow.com/questions/42689996/webview-vs-chrome-custom-tab
간단하게 쓸 때.
launchUrl만 호출해도 된다.
1
2
3
val builder = CustomTabsIntent.Builder()
val customTabsIntent = builder.build()
customTabsIntent.launchUrl(context, uri)
속도를 좀 더 빠르게 하고 싶다? warm up을 하기 위해 bind를 사용하자.
CCT가 종료되면 이전 Activity의 onResume으로 들어온다. 그래서 따로 콜백은 안써도 됨.
주의 사항
1
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
이런 에러가 뜨는건,
1
CustomTabsClient.bindCustomTabsService(context, CUSTOM\_TAB\_PACKAGE\_NAME, connection)
이렇게 bind해놓은 상태에서 다시 bind를 해버리면 발생한다. onDestroy에서 unbind해주어야 함. 그래서 mClient, mConnection 둘 다 멤버 변수로 저장해 두어야 한다.
1
activity.unbindService(mConnection)
참고 자료
https://developer.chrome.com/multidevice/android/customtabs : best practices, 왜 bind를 해야 하는지 등
This post is licensed under CC BY 4.0 by the author.