ちらみんズ☆ブログ
ツイート☆ちらみんズ、問題発生…

どうも、ねずみんです。
デザフェスのときに、近日公開!と言っていたツイちらですが、ここ最近になって大きな問題が発生してしまいました…

既にベータテストに参加していただいている方は、最小化してしばらくほかのアプリを使った後、「問題が発生したため、ツイちらを終了します」というのを何度かお目にかかっていると思います…

大変お待たせしてしまって申し訳ないですが、より品質の良いアプリを目指して修正していきたいので、どうかお待ちください^^;

さて、今日の記事ですがちょっぴり技術的なことを交えて、この事象について解説してみたいと思います。

Screenshot_2015-06-28-20-09-45

Android端末を使っていて、途中でほかのアプリを使うためにいったん閉じてタスク一覧から元使っていたアプリに戻る…なんてことが結構あると思います。

アプリを最小化したときに、裏で何が行われているかというと…
Androidは、使用メモリを最小限に抑えるためにしばらく使っていなかったアプリを終了させてしまいます^^;

Screenshot_2015-05-15-23-20-54
ツイちらの場合、ロゴから表示されたときは終了されたため再起動している。。。ということがわかります。

 

・・・という認識だったのですが、最近になって大きな勘違いをしていたことが判明orz

Androidは、しばらく使っていなかったアプリを終了させる… ではなく「バックグラウンドになっているアプリの中で使っているメモリの一部を初期化する」が正解でした。

何を言いたいか、パソコンのソフトにたとえると…

word
Wordで文書作成中に最小化して、ネットで資料を探しています
資料が見つかったので、Wordに戻って続きを作成しよう!
…がしかし、Wordは起動しているものの、さっきまで書いていた文書が白紙に!?

という、世にも恐ろしい状況がAndroidでは当たり前になっているわけです^^;

どうすればよいかというと、最小化する前に保存すれば良いですよね?

ツイちらの全画面で、保存する処理を追加しないとダメ…というのが今回の事象でした。。。

 

ここからは分かる人向けの内容になりますが、ソースコードとか出してしまうと…

こんな感じのコードを書いたとき、staticは要注意です。
このソースで、setValue()を呼んだあとはmStaticValueに”Hello World”が保持されていることを期待すると思います。
Androidでは、バックグラウンドに入って一部が初期化された場合に、mStaticValueがnullに初期化されてしまう場合があり、NullPointer Exception…といった具合になります^^;

finalを使って解決する方法もあるようですが、正式にはonSavedInstanceStateを使って値を保持するのが良いそうです。
詳しい技術ネタになってしまうので、詳細は以下からお願いします。
https://www.google.co.jp/?gws_rd=ssl#q=android%20activity%20onsavedinstancestate

 

今回の事象はバックグラウンドにしなければ問題が発生しないのと、バックグラウンドにしても必ず起きるわけではないので今さら気づくことになってしまいました…
いつまでも公開できず申し訳ありませんが、どうぞよろしくお願いします!

コメントを残す

メールアドレスが公開されることはありません。