AppCompatActivity VS ComponentActivity in Compose

오승준·2024년 9월 6일

문제상황

Xml View와 Compose를 같이 사용하려는 도중 발생한 상황에서
ComponentActivity를 상속받는 Class에서는 FragmentManager를 사용할 수 없는 문제가 발생

해결방법

구글링을 통해서
AppCompatActivity를 상속받으면 FragmentManager을 사용할 수 있다는 글을 발견했습니다.
그리고 이유를 더 알고싶어 AppCompatActivity와 ComponentActivity 차이가 뭔지 싶어서 내부 구조를 뜯어봤습니다.

open class ComponentActivity() : androidx.core.app.ComponentActivity(),

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,
        TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider 

AppCompatActivity는 FragmentActivity를 상속받고 있어서 FragmentManager를 사용할 수 있었습니다. 그러면 AppCompatActivity상속 받으면 compose를 사용할 수 있을지 의문이 생겼습니다. 그런데 FragmentActivity 내부를 보니

public class FragmentActivity extends ComponentActivity implements
        ActivityCompat.OnRequestPermissionsResultCallback,
        ActivityCompat.RequestPermissionsRequestCodeValidator

FragmentActivity는 ComponentActivity를 상속 받고있는 것을 볼 수 있었습니다.

결론

순수 Compose View를 만들 때는 ComponentActivity를
Compose와 xml View를 혼용해서 AppCompatActivity를 사용하는 것이 좋아보입니다.

Reference

https://medium.com/@mdhsieh8/showing-materialtimepicker-with-supportfragmentmanager-in-android-compose-ac4345ba19fb
https://stackoverflow.com/questions/67891362/componentactivity-vs-appcompatactivity-in-android-jetpack-compose

0개의 댓글