@@ -6,7 +6,7 @@ date: 2022-06-30
6
6
image : android-ios-life-cycle.jpeg
7
7
---
8
8
9
- # はじめに
9
+ ## はじめに
10
10
11
11
こんにちは。Android / iOS エンジニアの原田です。
12
12
@@ -17,119 +17,118 @@ image: android-ios-life-cycle.jpeg
17
17
18
18
本記事は、そんなネイティブアプリの開発を学ぶ上で、一番基盤となるライフサイクルについて OS ごとに簡単にまとめてました。ぜひ、畑の違うプラットフォームについての翻訳書として、参考いただければと思います。
19
19
20
- # 対象者
20
+ ## 対象者
21
21
22
22
- iOS のコードを読む Android 開発者
23
23
- Android のコードを読む iOS 開発者
24
24
25
- # 前提
25
+ ## 前提
26
26
27
27
- Android 側の解説は、 Activity よりも頻出であると考えられる Fragment を用います。
28
28
- iOS 側の解説は、UIViewController を用います。
29
29
- 執筆時点の環境は下記です。
30
30
- Android 12
31
31
- iOS 15
32
32
33
- # Fragment Lifecycle
33
+ ## Fragment Lifecycle
34
34
35
35
Fragment の Lifecycle は下記のようになります。プロダクトの設計や実装方針によって気にするべき状態は変わってきますが、どういう状況であっても知っていた方がいいと考えるのは赤枠で囲んだ6つです。
36
36
37
37
![ Blank board - Page 1 (5).png] ( < content/android-ios-life-cycle/Blank_board_-_Page_1_(5).png > )
38
38
39
- ## onCreate()
39
+ ### onCreate()
40
40
41
41
Fragment が生成された時に一度だけ呼び出されます。
42
42
43
43
以降、Fragment が生存している限りは2回目が呼ばれることはありません。
44
44
45
- ## onCreateView()
45
+ ### onCreateView()
46
46
47
47
Fragment に表示する View を生成する時に呼び出されます。返り値として、表示する View のインスタンスを返却する必要があります。
48
48
49
49
バックグラウンドからアプリを復帰させたり、別の画面へ遷移してからバックキーで戻ってきた場合など、画面を再表示するたびに呼び出されます。
50
50
51
- ## onViewCreated()
51
+ ### onViewCreated()
52
52
53
53
View が生成された後に呼び出されます。
54
54
55
55
引数として、 ` onCreateView ` で返却した View が渡ってくるため、ここで View の表示内容や制御等の初期化を行うことが多いです。
56
56
57
57
iOS 開発者に注意する点があるとするなら、** この時点では View のサイズが決定していない** ため、View のサイズを使って座標を計算したりすることはできません。もっと言うなら、Android には` viewWillLayoutSubViews() ` のような状態はありません。実際に描画されるまで View のサイズを取得することができないので、状況によっては ` ViewTreeObserver ` などを使って描画を監視する必要があります。
58
58
59
- ## onResume()
59
+ ### onResume()
60
60
61
61
Fragment が表示されて、アクティブな状態になった時に呼び出されます。
62
62
63
63
特に何か推奨される処理がある訳ではないですが、強いて言うなら画面が表示されたタイミングでしたいことがあればここで処理します。
64
64
65
- ## onDestroyView()
65
+ ### onDestroyView()
66
66
67
67
` onCreateView() ` で生成した View が破棄される時に呼び出されます。
68
68
69
69
具体的には、別の画面へ遷移した場合や、アプリをバックグラウンドにした時など、画面が見えなくなった時に都度呼び出されます。
70
70
71
- ## onDestroy()
71
+ ### onDestroy()
72
72
73
73
Fragment が破棄される時に1度だけ呼び出されます。
74
74
75
75
Fragment が居なくなってしまうため、ここで任意の処理をさせたいと考えた場合、本当に必要な処理か、あるいは適切なタイミングか精査した方がよい印象です。
76
76
77
- # UIViewController Lifecycle
77
+ ## UIViewController Lifecycle
78
78
79
79
UIViewController の Lifecycle は下記のようになります。こちらについても、採用する技術について気にするべき状態が大きく変わります。本記事では扱いませんが、xml で View を構築することが多い Android と比べて、iOS 開発では Interface Builder や Swift UI と選択肢があるため、状況に応じて実装の作法が変わることがあります。
80
80
81
81
とは言え、基本的な部分は一緒ではあるため、その中で理解しておいたほうがいいと考える状態は赤枠で囲んだ6つです。
82
82
83
83
![ Blank board - Page 1 (7).png] (<content />android-ios-life-cycle/Blank_board_ -_ Page_1_ (7).png>)
84
84
85
- ## viewDidLoad()
85
+ ### viewDidLoad()
86
86
87
87
View の階層構造が読み込まれた時に1度だけ呼ばれます。
88
88
89
89
View に対する追加の初期化処理や、Xib ファイルの読み込み、AutoLayout(Android で近い概念は ConstraintLayout) での制約の指定はここで行われます。
90
90
91
- ## viewWillAppear()
91
+ ### viewWillAppear()
92
92
93
93
画面が表示される前に1度だけ呼ばれます。
94
94
95
95
ここでは、View の表示に関わる追加の処理を実行します。[ 公式 Docs] ( https://developer.apple.com/documentation/uikit/uiviewcontroller/1621510-viewwillappear ) に具体例が載っているので、ここではそのまま引用しておきます。
96
96
97
97
> For example, you might use this method to change the orientation or style of the status bar to coordinate with the orientation or style of the view being presented.
98
- >
99
98
100
- ## viewWillLayoutSubViews()
99
+ ### viewWillLayoutSubViews()
101
100
102
101
ViewController に表示する SubViews をレイアウトを決定する前に呼び出されます。
103
102
104
103
画面のレイアウト処理に対して、もっともよく確認する部分です。AutoLayout で制約をつけられている場合はその限りではないですが、何かしらレイアウトに関する座標やサイズの計算をして配置する必要がある場合、必ずここで処理します。
105
104
106
- ## viewDidLayoutSubViews()
105
+ ### viewDidLayoutSubViews()
107
106
108
107
SubViews をレイアウトが決定した時に呼び出されます。
109
108
110
109
もしも、レイアウトした SubViews に対して何か変更をしたい場合はここで処理することになります。
111
110
112
111
代表的な例 かつ Android 開発者向けの注意点として、iPhone X 以降で導入された ** safeArea はここ以降でないと取得できない** ため、マージン調整の処理をすることがあります。
113
112
114
- ## viewDidAppear()
113
+ ### viewDidAppear()
115
114
116
115
実際に画面が描画されて表示された時に呼び出されます。
117
116
118
117
Android の ` onResume() ` と同様に、実際に画面が表示された時にしたいことがあればここで処理します。
119
118
120
- ## viewDidDisappear()
119
+ ### viewDidDisappear()
121
120
122
121
View が破棄された時に呼び出されます。
123
122
124
123
こちらも Android の ` onDestroyView() ` に似ていて、別の画面へ遷移した場合や、アプリをバックグラウンドにした時など、画面が見えなくなった時に都度呼び出されます。
125
124
126
- # 最後に
125
+ ## 最後に
127
126
128
127
今回は Android の Fragment 及び iOS の UIViewController それぞれで簡単にライフサイクルの紹介をしました。
129
128
130
129
もっと細かい話をすれば、Android は Fragment と Activity の関係、iOS では ViewController と SubViews のレイアウトの順序など説明すべきことは沢山あるのですが、まずはそれぞれのプラットフォームを学ぶためのとっかかりとして活用していただければと思います。
131
130
132
- # 参考
131
+ ## 参考
133
132
134
133
[ https://developer.android.com/guide/fragments/lifecycle ] ( https://developer.android.com/guide/fragments/lifecycle )
135
134
0 commit comments