いまさら聞けない activityやfragment - android …...•androidアプリを開発したり...
TRANSCRIPT
![Page 1: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/1.jpg)
いまさら聞けない ActivityやFragment
の おはなし
Android Bazaar and Conference 2016 Autumn
![Page 2: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/2.jpg)
• Androidアプリを開発したり
• iOSアプリを開発したり
• Webアプリ(TypeScript)を開発したり
• 技術情報を発信したり
★ Twitter @mokelab
★ https://tech.mokelab.com
![Page 3: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/3.jpg)
グッズあるよ!
![Page 4: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/4.jpg)
クイズを 16問用意しました
全問正解できたら。。。
![Page 5: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/5.jpg)
何もありません
![Page 6: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/6.jpg)
Activity
![Page 7: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/7.jpg)
Activity
• コンポーネントの1つだよ
• UIを提供するよ
• ライフサイクルがあるよ
![Page 8: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/8.jpg)
コンポーネント
![Page 9: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/9.jpg)
問1
Androidには、何種類のコンポーネントが ありますか?
![Page 10: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/10.jpg)
答1•4種類
✦ Activity
✦ Service
✦ BroadcastReceiver
✦ ContentProvider
![Page 11: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/11.jpg)
コンポーネントとは システムが必要に応じて オブジェクトを作って 仕事させるもの
![Page 12: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/12.jpg)
Activityの ライフサイクル
![Page 14: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/14.jpg)
Javaオブジェクトの ライフサイクル
public void moke() { // 誕生 Date d = new Date();
// 誰からも参照されなくなったら // 破棄される }
![Page 15: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/15.jpg)
問2
Activityのライフサイクルメソッドを全部言えますか?
![Page 16: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/16.jpg)
答2• onCreate()
• onRestart()
• onStart()
• onResume()
• onPause()
• onStop()
• onDestroy()
![Page 17: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/17.jpg)
![Page 18: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/18.jpg)
ライフサイクルメソッドは なんとなくで
呼ばれているものではない!
![Page 19: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/19.jpg)
onCreate()
• △ Activityが起動したとき
• ○ Activityオブジェクトが作られたとき
![Page 20: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/20.jpg)
onRestart()
• Activityが停止後、もういちど開始するとき
• 一度停止していないと呼ばれない
![Page 21: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/21.jpg)
問3
onStart()とonResume()の違いは何でしょうか?
![Page 22: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/22.jpg)
onStart()
• Activityが表示されたタイミングでよばれる
• この時点では、ユーザーの操作は受け付けない
![Page 23: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/23.jpg)
onResume()
• Activityがユーザーとの対話を始めたタイミングでよばれる
• ユーザーは、ボタンタップなどができる
![Page 24: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/24.jpg)
onStart()は 呼ばれるが onResume()は 呼ばれない例
![Page 25: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/25.jpg)
onPause()
• Activityがユーザーとの対話をとめるときによばれる
★別Activityを起動しようとした
★ダイアログを表示しようとした
![Page 26: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/26.jpg)
onStop()
• Activityがみえなくなるタイミングでよばれる
★別Activityが(全画面で)表示された
★ホームボタンを押した
![Page 27: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/27.jpg)
onDestroy()
• △ Activityが終了するときによばれる
• ○ Activityオブジェクトが破棄されるときに よばれる
![Page 28: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/28.jpg)
• 上Activityがアクティブのとき下Activityをタップするとライフサイクルメソッドはどのように呼ばれますか?
問4
![Page 29: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/29.jpg)
• 下ActivityonResume()が呼ばれる
答4• 上ActivityonPause()がよばれる(onStop()はよばれない)
![Page 30: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/30.jpg)
Activityオブジェクトの ライフサイクルは これでだいじょうぶ
![Page 31: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/31.jpg)
タスク
![Page 32: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/32.jpg)
問5
タスクとはユーザーにはどのように見えるか
説明できますか?
![Page 33: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/33.jpg)
答5
アプリ!
![Page 34: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/34.jpg)
タスク
https://developer.android.com/guide/components/recents.html
![Page 35: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/35.jpg)
タスクはスタック
一覧Activity
詳細Activity
Twitter投稿Activity
![Page 36: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/36.jpg)
Activityの起動起動する Activity
?
![Page 37: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/37.jpg)
問6
Activityの起動モードは何種類ありますか?
![Page 38: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/38.jpg)
答6•4種類 ★ Standard
★ SingleTop
★ SingleTask
★ SingleInstance
![Page 39: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/39.jpg)
Standard
• 指定なしはこれで起動する
• Intentを受け取ったら、インスタンスを作る
• Intentを投げたActivityと同じタスクに入る
![Page 40: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/40.jpg)
SingleTop
• Intentを投げたActivityと同じタスクに入る
• ただし、自分自身に対してIntentを投げた場合は、新たにインスタンスを作らず、onNewIntent()が呼ばれるだけ
![Page 41: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/41.jpg)
SingleTask
• どれか1つのタスクにしか所属できない
• なので、インスタンスは1つしかできない
![Page 42: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/42.jpg)
SingleTask• ケース1 起動するActivityがどのタスクにもいない
新しくタスクを作り、フォアグラウンドにもってくる
![Page 43: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/43.jpg)
SingleTask• ケース2 起動するActivityがすでに別タスクにいる
図で説明するよ
![Page 44: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/44.jpg)
SingleTask1.該当Activityのいるタスクを フォアグラウンドにする
Activity
Activity
ActivityActivity
Activity
フォアグラウンド
![Page 45: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/45.jpg)
SingleTask2. 該当Activityよりスタックで上にいるActivityを 全部終了させる!
Activity
Activity
ActivityActivity
Activity
フォアグラウンド
![Page 46: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/46.jpg)
SingleTask3. 該当ActivityのonNewIntent()が呼ばれる
Activity
Activity
ActivityActivity
フォアグラウンド
![Page 47: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/47.jpg)
例:OAuthのコールバック
1. アプリActivityがブラウザに対してIntent投げる
2. ブラウザのタスクがフォアグラウンドになる
3. コールバックを契機に、アプリActivityに Intentが投げられる
4. アプリActivityのタスクがフォアグラウンドになる(新しくインスタンスは作られない)
![Page 48: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/48.jpg)
SingleInstance
• どれか1つのタスクにしか所属できない
• そのタスクに別Activityを含めることはできない
★ SingleTaskだと含めることができるよ
![Page 49: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/49.jpg)
問7
Androidの標準アプリで SingleTaskが使われているのは
どれでしょうか?
![Page 50: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/50.jpg)
答7カメラ!
![Page 51: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/51.jpg)
答7• ホームでカメラアイコンをタップしたらすぐ撮影Activityが始まってほしい
• 編集Activityなどがあるので、上にActivityが のっかるのはOKにしたい
★編集を中断して、オーバービューから 再開はしたい
![Page 52: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/52.jpg)
問8
Androidの標準アプリで SingleInstanceが使われているのは
どれでしょうか?
![Page 53: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/53.jpg)
答8ブラウザ!
![Page 54: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/54.jpg)
答8はSingleTaskでしたす、すいません。。。
![Page 55: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/55.jpg)
答8ほんとの答えは通話中Activity
![Page 56: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/56.jpg)
答8• 通話中Activityが他のActivityの上に乗っているとユーザーは通話中Activityに戻りにくくなる
★オーバービューではルートのアプリ名だから
• 通話中Activityの上に別のActivityが乗ってると いざ通話をやめたいときに、バックボタンの連打が必要になってしまう
![Page 57: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/57.jpg)
問8おわび• 単なる動作ではSingleTaskとSingleInstanceの違いを見分けるのは困難でした。。。
• 通話ActivityがSingleInstanceかどうかは下記URLで確認できます(InCallActivity) https://android.googlesource.com/platform/packages/apps/Dialer/+/master/AndroidManifest.xml
![Page 58: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/58.jpg)
タスクアフィニティ
![Page 59: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/59.jpg)
問9
TaskAffinityということばを聞いたことありますか?
![Page 60: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/60.jpg)
タスクアフィニティ• 「親和性」
• ホームでアプリのアイコンをタップしたときどういう動きをすべきか
★ FLAG_ACTIVITY_NEW_TASK
★新しいタスクを作り続けるわけにはいかない
![Page 61: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/61.jpg)
タスクアフィニティタスクには名前がある=アフィニティ
Activity
Activity
ActivityActivity
Activity
タスクA タスクB タスクC
![Page 62: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/62.jpg)
タスクアフィニティ• ホームでアプリアイコンをタップした
• 同じアフィニティなタスクがない場合
• タスクを作ってそれをフォアグラウンドにする
• 同じアフィニティなタスクがすでにある場合
• そのタスクをフォアグラウンドにする
![Page 63: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/63.jpg)
問10
TaskAffinityはどんな時に指定すべきでしょうか?
![Page 64: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/64.jpg)
答10
1つのapkにLAUNCHERなActivityが2つ以上ある場合!
デバッグ用Activityをいれている時に有効
![Page 65: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/65.jpg)
タスクアフィニティを 設定する
<activity android:name=".EditActivity" android:taskAffinity="com.mokelab.app.debug"> <intent-filter> <action android:name="android.intent.action.EDIT"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
![Page 66: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/66.jpg)
タスクアフィニティを 設定する
ドット(.)が1つ以上ないとインストール時にエラー
Error installing split apks: com.android.ddmlib.InstallException: Failed to finalize session : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl231441147.tmp/base.apk (at Binary XML file line #26): Invalid taskAffinity name com in package com.mokelab.affinitydemo: must have at least one '.' separator
![Page 67: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/67.jpg)
問11
android:allowTaskReparenting=”true”は、どんな動きをするか理解していますか?
![Page 68: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/68.jpg)
答11EditActivityにandroid:allowTaskReparenting=”true”をつけた (赤枠は同じAffinityを持つActivity)
Activity
Edit
ActivityActivity
Edit
フォアグラウンド
![Page 69: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/69.jpg)
答11ホームでActivityのアイコンをタップする
Activity
Edit
ActivityActivity
Edit
フォアグラウンド
![Page 70: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/70.jpg)
答11android:allowTaskReparenting=”true”がついたEditActivityが集合する
Activity
Edit
ActivityActivity
Edit
フォアグラウンド
![Page 71: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/71.jpg)
答11そして、フォアグラウンドに移動
Activity Activity
Edit
Activity
Edit
フォアグラウンド
![Page 72: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/72.jpg)
タスクと起動モードは もう大丈夫ですよね?
![Page 73: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/73.jpg)
ですよね?
![Page 74: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/74.jpg)
Activityの
ライフサイクル (再)
![Page 75: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/75.jpg)
![Page 76: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/76.jpg)
タスクとActivity
Activity
Activity
ActivityActivity
Activity
フォアグラウンド
![Page 77: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/77.jpg)
Activityの状態
起動前 アクティブ
中断 終了
![Page 78: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/78.jpg)
中断中なActivity
Activity
Activity
ActivityActivity
Activity
フォアグラウンド Activity 中断状態
![Page 79: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/79.jpg)
中断中なActivity
Activity
Activity
ActivityActivity
Activity
フォアグラウンド Activity メモリ上にいない Activity
Activityオブジェクトは破棄されていることがある
![Page 80: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/80.jpg)
オブジェクトの 状態保存
• 中断状態の場合、オブジェクトが破棄されることがある
• アクティブに戻る時、オブジェクトを作り直す
• これをうまくやるのがonSaveInstanceState()
![Page 81: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/81.jpg)
プロセス
![Page 82: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/82.jpg)
プロセスとコンポーネント
Activity Activity Service
メインループ
![Page 83: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/83.jpg)
1プロセスで 複数アプリに存在
Activity
Edit
ActivityActivity
Edit
フォアグラウンド
![Page 84: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/84.jpg)
プロセス• 1プロセスで、複数のコンポーネントが動作する
• コンポーネント(Activity)は、複数タスク内に存在することがある
• static変数は、プロセス単位で保持される変数
★ static変数で状態を持ったりすると。。。
![Page 85: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/85.jpg)
プロセス
いつ停止させられるか予測不能!
![Page 86: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/86.jpg)
プロセス
停止前に状態保存処理は書けない!
![Page 87: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/87.jpg)
問12
static変数にアクセストークンを保持しているアプリを
クラッシュさせるには、どうすればよいですか?
![Page 88: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/88.jpg)
答12
![Page 89: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/89.jpg)
Activityまとめ
• Activityオブジェクトのライフサイクルメソッドの呼ばれるタイミングを学んだよ
• タスクと起動モードについて学んだよ
• プロセスとタスクの関係について学んだよ
![Page 90: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/90.jpg)
Fragment
![Page 91: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/91.jpg)
主要人物
• Fragment
• FragmentManager
• バックスタック
![Page 92: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/92.jpg)
Fragment
• レイアウトに貼って使うよ
★なので、使い回ししやすいよ
• 独自のレイアウトを持ってるよ
• 独自のライフサイクルがあるよ
![Page 93: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/93.jpg)
FragmentManager• Fragmentを管理する人だよ
• Fragmentのはりかえなどをやるよ
• ActivityやFragmentが持ってるよ
★ FragmentのgetFragmentManager()は親のFragmentManagerを取ってくるよ
![Page 94: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/94.jpg)
バックスタック
• Fragmentのはりかえ時に、状態をスタックに積めるよ
• バックボタンで、1つ前の状態(=画面)に戻れるようにするしくみ
![Page 95: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/95.jpg)
問13
Fragmentはandroid.app.Fragmentとサポートライブラリ版の
どちらを使うべきでしょうか?
![Page 96: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/96.jpg)
答13
サポートライブラリ版!
![Page 97: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/97.jpg)
Fragmentの ライフサイクル
![Page 98: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/98.jpg)
ライフサイクル
• 基本はActivityと同じ
• 見えなくなったら(onStop()が呼ばれたら)Viewだけ先に捨てる
![Page 99: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/99.jpg)
onCreateView()
• このFragmentが提供するViewを作ってほしいときに呼ばれるメソッド
• Viewを作ってreturnしよう
![Page 100: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/100.jpg)
問14
親Activityが ユーザー情報を保持していますこのユーザー情報をFragmentで取得してよいタイミングはいつでしょうか?
![Page 101: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/101.jpg)
答14
onActivityCreated()
![Page 102: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/102.jpg)
onActivityCreated()• 親となるActivityがちゃんとつくられた後に よばれるメソッド
★ onCreate()やonCreateView()の時点ではちゃんと作られていないことがある
• 親Activityから情報をとりたいときはこのメソッド内でとる
![Page 103: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/103.jpg)
onDestroyView()
• このFragmentが提供するViewを破棄するタイミングでよばれる
• フィールドにViewをセットしている場合はnullをいれてちゃんと破棄されるようにしましょう
★特にButterKnife
![Page 104: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/104.jpg)
引数のある Fragment
![Page 105: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/105.jpg)
問15
Activityでは、起動するためのIntentに引数データがセットできました
これと同様なことをFragmentで実現するにはどうすればよいでしょうか?
![Page 106: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/106.jpg)
答15
setArguments()
※setterはアンチパターン
![Page 107: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/107.jpg)
実行結果のある Fragment
![Page 108: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/108.jpg)
問16
Activityでは、次Activityの実行結果をonActivityResult()で受け取れました
これと同様なことをFragmentで実現するには
どのようにすればいいでしょうか?
![Page 109: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/109.jpg)
答16
1. setTargetFragment()で、呼び出し元Fragment とリクエストコードをセット
2. getTargetFragment()で取り出して、 onActivityResult()を呼ぶ
※コールバックオブジェクトを渡すのはアンチパターン
![Page 110: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/110.jpg)
Fragmentまとめ
• Fragmentがどのようなものか学んだよ
• 引数つきFragmentのつくりかたを学んだよ
• 呼び出し元に結果を伝える方法を学んだよ
![Page 111: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/111.jpg)
ようやく アプリ開発の
スタートラインに立てた!
![Page 112: いまさら聞けない ActivityやFragment - Android …...•Androidアプリを開発したり • iOSアプリを開発したり • Webアプリ(TypeScript)を開発したり](https://reader034.vdocuments.mx/reader034/viewer/2022043019/5f3b86d093da1f10dd3b8c48/html5/thumbnails/112.jpg)
クラッシュするアプリが 減りますように