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만 호출해도 된다.
```kt
val builder = CustomTabsIntent.Builder()
val customTabsIntent = builder.build()
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
```
이런 에러가 뜨는건,
```kt
CustomTabsClient.bindCustomTabsService(context, CUSTOM_TAB_PACKAGE_NAME, connection)
```
이렇게 bind해놓은 상태에서 다시 bind를 해버리면 발생한다.
onDestroy에서 unbind해주어야 함. 그래서 mClient, mConnection 둘 다 멤버 변수로 저장해 두어야 한다.
```kt
activity.unbindService(mConnection)
```
참고 자료
https://developer.chrome.com/multidevice/android/customtabs : best practices, 왜 bind를 해야 하는지 등
'Java Stack > Android' 카테고리의 다른 글
RecyclerView의 Adapter와 ViewHolder (0) | 2019.07.05 |
---|---|
MVVM과 Android DataBinding (3) | 2019.07.04 |
[Android] HTTP 요청 (Retrofit / OkHttp) (0) | 2018.12.26 |
Android Widget 제작 참고 자료 및 주의 사항 (0) | 2018.12.23 |
액티비티 : Activity life cycle, 백스택, singleTop (0) | 2018.05.20 |