生涯未熟

生涯未熟

プログラミングをちょこちょこと。

Androidのプッシュ通知でドハマリ

お仕事でAndroidのアプリを作成しているのですが、その中でプッシュ通知絡みでドハマリした話をば。



まずアプリの内容としては、プッシュ通知を受けてポップアップダイアログを表示する、といった機能を持ったアプリを作成していました。

で、Android標準搭載してある自動タスクキラーでタスクマネージャ上から消された後、アプリを再立ち上げしてみると、
ポップアップダイアログがまた表示されるというバグに遭遇。



最初にやっていたのが、onCreate内でGCMから送られてきたintentをキャッチして、
プッシュ通知が来たかどうかの変数をtrueに設定し、ポップアップダイアログが閉じられた時にfalseにするという処理。

こうしておけば、アプリを再立ち上げしてもプッシュ通知が来たかどうかの変数を見て、
ポップアップダイアログを出す・出さないを分岐できるかなと考えてました。


しかし、これでも同じ条件でテストをしてみるとバグが出る。




うーむと考えて、プッシュ通知が来たかどうか判定していたintentの内容をクリアするみたいな感じの処理をやってみるが、
上手くいかず。



で、色々とintentの挙動を調べると以下のことが判明した。


・アプリの起動時にはintentの内容はクリアな状態でonCreateされる。

・タスクキラーによって消された後、アプリを起動させるとintentの内容が残ったままonCreateされる。



これを踏まえた上で、onCreateでintentを受け取り、onResumeに実際の処理を書いていく。
で、onRestoreInstanceState()を使ってアプリ再起動時にfalseにしてみたら案の定成功。


intentの扱いってよく分からんなー
というかアプリ開発は分からんことだらけだ・・・