SlideShare a Scribd company logo
1 of 21
Download to read offline
static変数さんと
Activityさん
Androidで
static変数を使うと。。。
登場人物
● static変数さん
○ publicだとクラスを知ってる人なら誰でもアクセスでき
るよ
○ singletonで使う人もいるよね
○ プロセスが止まると中身無くなるよ

● Activityさん
○ アプリの基本要素だよ
○ ライフサイクルがあるよ
○ インスタンスは状況によって破棄されるよ
static変数さんを使いたくなる時
サービスのアクセストークンをアプリの起動中、
保存したい
ログイン後、
SharedPreferencesに保存して、
static変数にアクセストークンをセット
そして次のActivity/Fragmentに遷移
つまり。。。
static変数に値をセットするのは

最初のActivityのみ

(毎回SharedPreferencesから読むのなら、
そもそもstatic変数に値セット、しないよね)
で、いつ使うんだっけ?

アプリの起動中、保存したい

アプリの起動中、保存したい

アプリの起動中、保存したい
アプリの起動中って
プロセスが生きている間のことだよね?

それ、ホントか?
Activityのライフサイクル
onCreate()
↓
onStart()
↓
onResume()
↓

onPause()
↓
onStop()
↓
onDestroy()

(http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle)
ホームボタンを押すとどうなる?
●
●
●
●

onPause()が呼ばれる
アプリの実行は中断される
アプリの実行は中断される
アプリの実行は中断される
Activityがバックグラウンドにいる
システムリソース(メモリなど)が足りなくなると、
Activityインスタンスが破棄される
状況によっては、

プロセスも止まる
Activityインスタンスの破棄
後で復元するために、
onSaveInstanceState()が実行される
退避したBundleはonCreate()などで
引数として復元用に渡される
プロセスが止められると
static変数さんの中身は

無くなる

(さよならstatic変数さん)
アプリ切り替えで再開
Activityが破棄されていたら?
onCreate()の引数に、退避させたインスタンス
の情報が入ってる
復元可能!
(というか復元してくださいおねがいします)
プロセスが殺されてたら?
アプリ最初から起動しなおし?

(まさかね。。。)
現実は。。。
1. プロセスをもう一度立ち上げる
2. Activityの復元を行う
3. ホームボタンを押した時点に戻る(ちゃんと
作っていれば)

最初からじゃない!
static変数さんの中身は?
設計では、ログイン用Activityでのみセットだった
よね?
途中から再度プロセスが起動すると、セットする
タイミングは?
消えるケースがあるのはわかった
でも、実際にプロセスまで殺されるケースって、
再現難しくない?
Activityであれば、開発者オプションにあるけ
ど。。。
DDMSで止めれます
開発中アプリのプロセスを選んで
真ん中のSTOPボタン

(画像つぶれててすいません。。)
static変数さんを空にしてみよう
再現手順のまとめ
1. static変数に値をセットする
2. 次のActivityに遷移する
3. ホームボタンを押してアプリ中断
4. DDMSでプロセスを止める
5. アプリ切り替えでアプリ再開
6. static変数の値を使う処理を行う
ということで
アプリ起動中にstatic変数の中身が空になる
ケースは

あります

メモリキャッシュのような、消えてもあまり困らな
いものを入れる程度にしておいたほうが吉(と、
fkmさんは感じてる)
static変数さんと
Activityさん
完?
著 @fkm

More Related Content

What's hot

エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
 

What's hot (20)

エンジニアという仕事を楽しみ続けるためのキャリア戦略
エンジニアという仕事を楽しみ続けるためのキャリア戦略エンジニアという仕事を楽しみ続けるためのキャリア戦略
エンジニアという仕事を楽しみ続けるためのキャリア戦略
 
SQuaRE に基づくソフトウェア品質評価枠組みと品質実態調査
SQuaRE に基づくソフトウェア品質評価枠組みと品質実態調査SQuaRE に基づくソフトウェア品質評価枠組みと品質実態調査
SQuaRE に基づくソフトウェア品質評価枠組みと品質実態調査
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
 
ROS2勉強会 4章前半
ROS2勉強会 4章前半ROS2勉強会 4章前半
ROS2勉強会 4章前半
 
myCobotがある生活
myCobotがある生活myCobotがある生活
myCobotがある生活
 
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
 
OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
テストで使うツールの紹介
テストで使うツールの紹介テストで使うツールの紹介
テストで使うツールの紹介
 
めざせスカウター! HoloLensによる特定個人の 顔認識アプリ制作とその課題
めざせスカウター! HoloLensによる特定個人の 顔認識アプリ制作とその課題めざせスカウター! HoloLensによる特定個人の 顔認識アプリ制作とその課題
めざせスカウター! HoloLensによる特定個人の 顔認識アプリ制作とその課題
 
WebRTC研修
WebRTC研修WebRTC研修
WebRTC研修
 
データ収集の基本と「JapanTaxi」アプリにおける実践例
データ収集の基本と「JapanTaxi」アプリにおける実践例データ収集の基本と「JapanTaxi」アプリにおける実践例
データ収集の基本と「JapanTaxi」アプリにおける実践例
 
.NETのサポートポリシーのおさらい #csharptokyo
.NETのサポートポリシーのおさらい #csharptokyo.NETのサポートポリシーのおさらい #csharptokyo
.NETのサポートポリシーのおさらい #csharptokyo
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
 
認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
 
REST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向けREST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向け
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
 

More from Hirokazu Fukami (8)

Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
 
Goを知る
Goを知るGoを知る
Goを知る
 
Fragmentを使って「アプリ」を作る2
Fragmentを使って「アプリ」を作る2Fragmentを使って「アプリ」を作る2
Fragmentを使って「アプリ」を作る2
 
Unity + MBaaS
Unity + MBaaSUnity + MBaaS
Unity + MBaaS
 
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
 
Kii cloud 勉強会 #2
Kii cloud 勉強会 #2Kii cloud 勉強会 #2
Kii cloud 勉強会 #2
 
Git level1
Git level1Git level1
Git level1
 
プログラミング勉強会 その0
プログラミング勉強会 その0プログラミング勉強会 その0
プログラミング勉強会 その0
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

[Android]Static変数さんとactivityさん