2015年5月2日土曜日

[日常]Android 5.1.1が降ってきたNexus7(2013) 特定の通知を受けてハングアップ


うーん、Lolipopは随分とバギーなようですね・・・?

Nexus7(2013)使っていて5.1.1が降ってきた人は、古いバージョンのまま更新されてないアプリの通知は切っておくほうが無難かもしれません。
今回はそんなお話。

世間的には5.2がリリースされた?らしい?という話が出たまさに次の日、遅れていた5.1.1がようやくNexus7(2013)に降ってきました。なんかNexus7(2012)より払底来るのが遅かったとかなんとか。
ただ、5.2でようやくメモリリークが直ってたようで、ってことは5.1.1では直ってないってことで。
なんでアップデートはどっちゃでもよかったんですがそこはそれ。上げてなんぼですよえぇ。そういうの大好きですし!

で、さっそくアップデートしてしばらくしたら
「カチッ・・・カチッ・・・カチッ・・・」
とエンドレスでディスプレイのON/OFFを繰り返す音が。

おっかしーなー、なんだなんだ?ってタブレットを眺めてみるとなんか壁紙が初期化された上にずっと点滅を繰り返してる。
電源ボタンを押してディスプレイをOFFにしたら音は収まるんだけど、次にスリープから復帰させたらまた点滅を繰り返す。

で、電源長押しのシャットダウンについては実行できまして。再起動したらとりあえず問題なく動いていたり。
って思ってしばらくしたらまーた「カチッ・・・カチッ・・・カチッ・・・(ry」

うん、これやばい、これアカンやつや! って思ったけれどもう夜も遅い。とりあえず原因も分からんからしばらく様子を見ながら一体何がこの現象のトリガーになってるのか調べよう。そう思って動画だけSNSに上げて寝ました。

でもって次の朝、どうやら問題なかったらしい。いつものごとく朝の挨拶つぶやいて朝の支度してたらまーた点滅。
もうここらへんになってくると慣れたもんで、さっさと再起動して出社。 電車内でもまぁハングアップしたりしてもうほんとどうすっかなこれって途方に暮れた一日でしたが、帰って調べてみるとどうやらちらほらと報告はされてたみたい・・・?(日本語では見つかりませんでしたが)。

で、やれ「Google検索アプリの ok,google 機能を殺せばOK」だの、「SmartLockを全部無効にしておけばOK」だのちらりほらり見つけた対処法らしきものを試しますが効果なし。
そんな中見つけた次のスレッドでティンときた。
Issue 163385 - android - systemui crash when setting Notificaion.icon but not through Builder.setSmallIcon() - Android Open Source Project - Issue Tracker - Google Project Hosting
このスレッドいわく、どうも通知絡みで不具合なのかなんなのか、システムが意図しない通知を送られるとちょうど私の端末の症状が発生するらしい。
(なおこの症状を調べていて、初めて「crash loop」と英訳されることを知りました。今後役に立ちそうだ。立てたくないけど)

確かに、Android5.0で通知周りは結構変更が入って、古めのアプリであればシステムが意図しない通知を送ってきている可能性はあり得る、そして自分は_ks/問題強調/モンキチ ベータ版 (@_ks) | Twitterさんの作ってくれたSNSクライアントを使っている・・・。
このクライアント、かなり前に作ってもらってそして随分更新されていない。もちろん5.0対応もしていない(4.0くらいに作ってもらったような・・・?)。
通知周りで意図しない挙動をしている可能性は少なくない。

そういえば、症状が出てから次の朝まではなんともなかった。私は寝るときには端末のWi-Fiを切り、さらに部屋のルータを始め家電の電源を電源タップからOFFする人なのです。なので夜中は一切通信をしないため、もちろんSNSの通知も受信しません(※ なお、その日は夜に通知来てなかったので通信してても一緒でしたが・・・w)

で、朝起きて挨拶ツイートしたしばらくあとにcrash loop。さらに電車内で適当なニュースをつぶやいてしばらくしたらcrash loop。帰ってきて適当なニュースをt(ry

タイミング的にはSNSクライアントの通知が非常に怪しい。こうなったら通知が来るのをばっちり見届けようって、じーっと端末見てましたら見事にTwitterのリプをもらった瞬間端末がcrash loopへ。
あぁ、もうこいつでほぼ確デス!(ピスタチオ風)ってことでそのクライアントの通知を切ってみると、それまでのcrash loopが嘘のように快適に過ごせるようになりましたとさ。

今回のケースの場合、サードパーティのクライアントのため、それの通知を切っても本家アプリも入れていたので通知自体は本家アプリからも届くってことで特に困りませんでした。アプリ自体をアンインストールする必要はなかったので助かってます。個別に通知が切れるんでしのげましたね・・・。

ただ、これ、多くの人が「壊れた!」って匙投げるレベルの不具合じゃないかなぁ・・・? Nexus7(2013)以外では出ていないのか、かなり致命的な不具合の割に話題になってません。Nexus7(2013)ですら英語で数件しか見つかりませんでした。探し方にもよるんでしょうが、なんせ遭遇する確率は低いようです。ただ、低くても食らっちゃうとかなり面倒です。
通知を切ればいいじゃないって話ですが、これ、システムUIがクラッシュしてるので、セーフモードでも通知を受けたらcrash loopに入っちゃいます。
タスクアプリのように、完了処理をするまでスヌーズで起動直後すぐに通知を出すようなアプリが原因だった場合、通知を切る設定をする前にcrash loopに入る可能性も有ります。そうなるとadbで該当アプリを削除するくらいしか手がないと思いますが(ファクトリーリセットとかは除く)、それをやれってのは酷な話だと思うんですよねぇ・・・。

しかしマイナーバージョンアップだと思って油断した。まさかこんな罠が待っているとは・・・。
日本語での記事を見かけなかったので書いてみた。今は記事出てたりするのかな?

運悪く症状にぶち当たっちゃった人は通知を疑ってみてくださいませ!
ではでは!