ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Activity とは
Activity は Android アプリにおける「1 つの画面」を表す中心クラスです。ユーザーが見る UI の入り口でもあり、ライフサイクル管理・画面遷移・状態保存の起点となります。アプリは複数の Activity から構成され、それぞれが独立したスタックエントリとして遷移します。
近年はSingle Activity 構成(Activity 1 個 + Fragment / Jetpack Compose Navigation)が主流ですが、Activity の役割を理解しないと深い設計はできません。
最小の Activity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.btn_next).setOnClickListener {
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("user_id", 42)
startActivity(intent)
}
}
}
// AndroidManifest.xml には登録必須
// <activity android:name=".MainActivity" android:exported="true">
// <intent-filter>
// <action android:name="android.intent.action.MAIN" />
// <category android:name="android.intent.category.LAUNCHER" />
// </intent-filter>
// </activity>
ライフサイクル
Activity は OS の状態に応じて、決まったコールバックが順番に呼ばれます。これがライフサイクルです。
| メソッド | 呼ばれるタイミング | 典型処理 |
|---|---|---|
onCreate | 初回生成(Activity 作成) | レイアウト設定、初期化 |
onStart | 画面が見える直前 | UI 更新の準備 |
onResume | フォアグラウンドで操作可能になる直前 | センサー / カメラ ON |
onPause | 別画面で半分隠れる直前 | センサー / カメラ OFF、軽い保存 |
onStop | 完全に見えなくなった | ヘビーな処理停止、DB に保存 |
onSaveInstanceState | onPause/onStop 直前 | 状態を Bundle に保存(画面回転対策) |
onRestart | onStop → 復帰 | 必要に応じて再開 |
onDestroy | Activity 破棄前 | リスナー解除、リソース解放 |
class DetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
val userId = intent.getIntExtra("user_id", -1)
Log.d("Lifecycle", "onCreate userId=$userId")
}
override fun onStart() { super.onStart(); Log.d("Lifecycle", "onStart") }
override fun onResume() { super.onResume(); Log.d("Lifecycle", "onResume") }
override fun onPause() { super.onPause(); Log.d("Lifecycle", "onPause") }
override fun onStop() { super.onStop(); Log.d("Lifecycle", "onStop") }
override fun onDestroy() { super.onDestroy(); Log.d("Lifecycle", "onDestroy") }
override fun onSaveInstanceState(out: Bundle) {
out.putString("draft", editText.text.toString())
super.onSaveInstanceState(out)
}
}
Intent と Bundle でデータ受け渡し
// 送信側
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("user_id", 42)
putExtra("name", "Taro")
putExtra("is_admin", true)
}
startActivity(intent)
// 受信側 (DetailActivity.onCreate)
val userId = intent.getIntExtra("user_id", -1)
val name = intent.getStringExtra("name") ?: "Unknown"
val isAdmin = intent.getBooleanExtra("is_admin", false)
// Parcelable / Serializable も渡せるが、Activity 間で大量データはやめる
// 推奨は ViewModel 共有 (Single Activity 構成) or DB / SharedPreferences 経由
結果を受け取る (Activity Result API)
startActivityForResult は API レベル 31 で廃止。代替として Activity Result API を使います。
// 旧 (廃止)
// startActivityForResult(intent, REQUEST_CODE_PICK)
// → onActivityResult(requestCode, resultCode, data)
// 新: registerForActivityResult
class MainActivity : AppCompatActivity() {
private val pickContactLauncher = registerForActivityResult(
ActivityResultContracts.PickContact()
) { uri: Uri? ->
uri?.let { Log.d("Pick", "Selected $it") }
}
private val cameraLauncher = registerForActivityResult(
ActivityResultContracts.TakePicturePreview()
) { bitmap: Bitmap? ->
bitmap?.let { imageView.setImageBitmap(it) }
}
fun openPicker() {
pickContactLauncher.launch(null)
}
fun openCamera() {
cameraLauncher.launch(null)
}
}
Tasks と Back Stack
Activity はタスク (Task) という後入れ先出しスタックに積まれます。「戻る」ボタンでスタックから pop されます。
| launchMode | 挙動 | 用途 |
|---|---|---|
standard (デフォルト) | 毎回新規生成しスタックに積む | 通常画面 |
singleTop | スタック頂上が同一なら新規生成しない(onNewIntent) | 通知 → 既存画面 |
singleTask | タスク内で 1 つ。既存 Instance に戻り、上に積まれたものを破棄 | メイン / ホーム画面 |
singleInstance | 専用タスク。常に 1 個 | 通話 / アラーム画面 |
<!-- AndroidManifest.xml -->
<activity
android:name=".MainActivity"
android:launchMode="singleTop" />
<!-- 通知タップ → 既存 MainActivity を再利用、onNewIntent が呼ばれる -->
Jetpack Compose / Fragment との関係
モダンな構成では Activity を多用しません。
- Single Activity + Fragment + Navigation Component — 画面遷移を Fragment に委譲
- Single Activity + Jetpack Compose + Navigation — 画面遷移を Composable に委譲(最新主流)
- 複数 Activity — レガシー or プロセス分離が必要な場合のみ
// Compose Navigation で「画面遷移」を Activity 無しで実現
@Composable
fun AppNav() {
val nav = rememberNavController()
NavHost(nav, startDestination = "list") {
composable("list") { ListScreen(onClick = { id -> nav.navigate("detail/$id") }) }
composable("detail/{id}") { backStackEntry ->
DetailScreen(id = backStackEntry.arguments?.getString("id"))
}
}
}
FAQ
Q: 画面回転でデータが消える
A: onSaveInstanceState で Bundle に保存、または ViewModel に持たせる(Configuration Change を超えて生存)。
Q: finish() と onBackPressed() の違い
A: finish は明示的に閉じる(戻るボタンを押した相当)、onBackPressed は戻るボタン押下時のフック。OnBackPressedDispatcher を使うのが推奨。
Q: Single Activity 構成のメリット
A: 画面間のデータ共有が容易(ViewModel スコープ)、Animations が滑らか、メモリ効率良好、Compose との相性◎。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
- リソース (Android アプリケーション)
- アクティビティ (Android アプリケーション)
- メッセージの表示
- データベースの操作 (Android アプリケーション)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?