MainActivityの主なベースクラスについて

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

[2] https://codezine.jp

タイトルとURLをコピーしました