ぺぷしのーげん

大企業からスタートアップに転職したアプリケーションエンジニアのブログ

ポケモンGOがフリーズしたりアプリクラッシュ、落ちる原因をエンジニアが想像してみた

f:id:hazakurakeita:20160713002846p:plain

【公式】『Pokémon GO』 初公開映像 - YouTube

ポケモンブームは本当にすごいですね。田舎でもポケストップにはポケモンしてる人がいて、本当に日本中でプレイされているんだなと実感します。しかし、僕は最近ポケモンがフリーズしたり落ちたりしまくりで苦労してます。今回はその内容と原因を想像してみました。

 

1. アプリが反応しなくなる

トレーナーはGPSに反応して移動するし、ポケモンも出現するのですが、タッチできません。タッチできないのはポケストップやポケモンだけでなく、メニューも反応しない。こうなるとアプリを再起動するしか方法がありません。これはバッテリーセーバーに不具合があって発生するという報告があり、開発のナイアンティックも認めています。

nlab.itmedia.co.jp

考察

僕もバッテリーセーバーでしばらく画面をオフにしていると問題が発生します。10分くらいオフになると発生するそうですが、なぜこんなことが?画面を一定時間切り替えているせいでタッチイベントが発生しなくなっているのか、上位レイヤーに何か残ってしまって、画面は表示されているけど触れなくなってしまっているのか、とにかく謎です。AndroidとiOS両方で同じ問題が起きるそうなので、Unityの仕様による問題かもしれませんね。

 

2. アプリがフリーズする

f:id:hazakurakeita:20160729004029p:image

これ頻繁に起きてイラっとします。特にポケモンをゲットする寸前や、ジム戦で起きることが多いです。今日もジムでトレーニングをしたら画面が真っ白笑。それでもタッチすると攻撃できたので、とりあえず連打してカイロスに勝つことができました!が、勝ったところでフリーズ。次の試合が開始されません。しょうがないのでアプリ再起動です。。。

考察

雰囲気から通信の問題であることが多いようです。ポケモンをゲットした時にフリーズしたこともありましたが、その時は質の悪いWiFi環境でした。上のジム戦も駅のホームで人が多いところだったので、通信で何か問題が起きているようです。ただ単に通信ができなくて通信の応答を待っているだけかもしれません。実際にジム戦でフリーズした時にFacebookアプリを起動してみたら通信ができていませんでした。通信ができない理由はよくわかりません。混雑してるだけかもしれませんが、長時間プレイによるスマホの熱暴走もあるのかも。

 

3. アプリがクラッシュする

もうこれ頻発しまくりです。1日に数十回発生します笑。発生するのは電車内でプレイしている時が多いです。

考察

突然落ちるのでメモリ関連が怪しいです。メモリリークしているのか、足りなくなっているのか分かりませんが、本当に突然落ちます。バックグラウンドに残っている場合と残っていない場合の2ケースがあります。電車で移動していると、GPSの位置情報が高速で移動するので、地図情報の更新もひっきりなしに実行されます。この地図情報の更新とポケモン出現の計算や描画処理でメモリを一気に消費することがあるのかもしれません。まあ、それでも普通は落ちないようになってるはずなんですけどね。。。

 

4. アプリが起動できない

f:id:hazakurakeita:20160729004044p:image

昨日と今日で発生しました。クラッシュした後に再起動するとLoading画面のまま起動しません。しばらくすると起動に失敗しましたと表示されます。何度再起動してもダメで、iPhoneを再起動してもダメでした。諦めてしばらくしてから起動すると、ようやく起動できました。。。

考察

この問題が発生するのはクラッシュ後です。それもジム戦で何かスタートさせたり、ポケモンゲットする寸前でのクラッシュでした。この場合、もしかするとアプリとサーバー間でデータの不整合が発生しているのかもしれません。それでLoadに時間がかかって、タイムアウトになっているのかも。もしくは通信の問題でクラッシュして、通信が復旧できていないのでLoadできない可能性もあります。

 

とまあ、電車でプレイすると問題が発生しまくるポケモン。iPhoneも熱くなるので、高速で移動していると処理が多くなるのかもしれません。とはいえ、長距離通勤者にとってはポケモンは丁度良いゲームです。イライラしながらもプレイしてしまう自分はもう完全にナイアンティックや任天堂のカモネギなのかもしれません。。。

 

おしまい。