最近、Google マップ API v2 を使用するようにアプリを更新するよう促されました。(Google は最終的に v1 の API キーの付与を完全に中止しました。) 新しい API を実装して、以前のアプリと同じように動作するようにしました。ただし、発生する奇妙なバグに気付きました。
SupportMapFragment を使用するアクティビティに移動し、[戻る] を押して前のアクティビティに移動してから、再び SupportMapFragment アクティビティに進むと、ランダムにクラッシュします... 時にはすぐに、時には 1 分かかることがあります。変更された唯一のことは、新しい API を使用しているため、新しい API を使用するようにコードをリファクタリングしたことです。
04-25 08:00:24.415: W/dalvikvm(12746): threadid=28: thread exiting with uncaught exception (group=0x40b9f930)
04-25 08:00:24.445: E/AndroidRuntime(12746): FATAL EXCEPTION: Thread-1711
04-25 08:00:24.445: E/AndroidRuntime(12746): java.lang.NullPointerException
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.RequestHeaders.addCookies(RequestHeaders.java:285)
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpEngine.prepareRawRequestHeaders(HttpEngine.java:724)
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:217)
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
04-25 08:00:24.445: E/AndroidRuntime(12746): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
04-25 08:00:24.445: E/AndroidRuntime(12746): at maps.z.bk.run(Unknown Source)
04-25 08:00:24.475: W/ActivityManager(517): Force finishing activity com.___.___/com.___.___.activities.ActivityWithMap
04-25 08:00:24.625: D/overlay(158): Unset pipe=VG0 dpy=0; Unset pipe=VG1 dpy=0; Unset pipe=RGB1 dpy=0;
04-25 08:00:37.398: I/Process(12746): Sending signal. PID: 12746 SIG: 9
04-25 08:00:37.418: I/ActivityManager(517): Process com.___.___ (pid 12746) has died.
04-25 08:00:37.418: W/ActivityManager(517): Force removing ActivityRecord{4178d2a8 u0 com.___.___/com.___.___.activities.PreviousActivity}: app died, no saved state
04-25 08:00:37.428: W/InputDispatcher(517): channel '41e3b688 com.___.___/com.___.___.activities.PreviousActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
04-25 08:00:37.428: E/InputDispatcher(517): channel '41e3b688 com.___.___/com.___.___.activities.PreviousActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
04-25 08:00:37.428: W/InputDispatcher(517): Attempted to unregister already unregistered input channel '41e3b688 com.___.___/com.___.___.activities.PreviousActivity (server)'
04-25 08:00:37.428: I/WindowState(517): WIN DEATH: Window{41a48790 u0 com.___.___/com.___.___.activities.ActivityOther}
04-25 08:00:37.428: I/WindowState(517): WIN DEATH: Window{41e3b688 u0 com.___.___/com.___.___.activities.PreviousActivity}
それが役に立ったら、MapFragmentアクティビティに戻ってから画面をオン/オフすると、クラッシュが速くなるようです...
アクティビティを2回開始することと関係があることは知っていますが、この奇妙なクラッシュを引き起こす原因はどこにも見当たりません。さらに、v1では発生しませんでした...ブレ。
それを理解しようとして何度もグーグルを試しました...
また、これが役立つ場合、例外はスタックトレースに記載されているように bk.run() の別のスレッドで発生するようですが、私のアプリは、そのスレッドを手放すまでEclipseで中断されている間、デバイス上で機能し続けます。アプリは実際にクラッシュします。
また、マップで何もせず、SupportMapFragment で getMap() を呼び出しても、マップ フラグメントを使用してアクティビティに 2 回アクセスするとクラッシュが発生することも確認しました。マップ フラグメントまたは Google マップの読み込み。回転時にもクラッシュします (アクティビティが再作成されるため)。