Jetpack Composeで開発を行う際、MainActivityのベースクラス(親クラス)として使われる主なコンポーネントとその役割を解説します。
🚀 結論:基本は ComponentActivity
Jetpack Compose専用の画面を作る場合、特別な理由がない限りComponentActivityを継承します。
🏛️ 主なベースクラス一覧
1. ComponentActivity (推奨)
Jetpack Composeの機能をフルに使うための最もクリーンで軽量なベースクラスです。
- 役割: Composeの画面描画に必要な最低限のライフサイクルと、Jetpackライブラリ(ViewModelなど)の基盤を提供します。
- メリット: XML(Viewシステム)向けの不要なレガシーコードが含まれないため、動作が軽量です。
- コード例: [1]
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
// ComposeのUIコード
}
}
}
2. AppCompatActivity (移行期・ハイブリッド用)
従来のAndroid開発(XMLテーマや旧コンポーネント)との互換性を保つためのクラスです。
- 役割: 古いバージョンのAndroid OSでも新しいUI機能(アクションバーなど)を使えるようにします。
- 使いどころ: 既存のXML画面(Fragmentやマテリアルコンポーネントのテーマ)をComposeに少しずつ移行する場合に使用します。 [2]
3. FragmentActivity (特殊なケース)
Fragment(フラグメント)の管理に特化したクラスです。
- 役割:
FragmentManagerを使用して複数のFragmentを制御します。 - 使いどころ: 画面遷移にComposeのNavigation(Navigation Compose)ではなく、従来のFragmentをそのまま使いたい場合に使用します(※
AppCompatActivityの親クラスでもあります)。
🔄 各クラスの継承関係
クラスの階層構造を知ると、役割の違いがより明確になります。
android.app.Activity
└── androidx.core.app.ComponentActivity (Core機能)
└── androidx.activity.ComponentActivity (★Composeはここ)
└── androidx.fragment.app.FragmentActivity
└── androidx.appcompat.app.AppCompatActivity (★XML互換)
💡 どちらを選ぶべき?
- 新規のComposeアプリ:
ComponentActivityを選択 - XMLからComposeへの移行・混合アプリ:
AppCompatActivityを選択
今後のステップに向けて、現在どのようなアプリを開発予定か教えていただけますか?
- 新規で完全にCompose化されたアプリを作っていますか?
- 既存のXMLベースのアプリを移行しようとしていますか?
状況に合わせて、具体的なセットアップ方法や注意点をご案内します。
[1] https://developer.android.com