0

最近、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 マップの読み込み。回転時にもクラッシュします (アクティビティが再作成されるため)。

4

1 に答える 1

0

結局のところ、この問題は、アプリの起動時にアプリが次の行を実行したことが原因でした。

CookieHandler.setDefault(new CustomCookieManager());

次に、その行が以前に実行されていた場合、アクティビティへの 2 番目のエントリの後でマップがクラッシュします。

これが、スタック トレースが addCookies で発生したクラッシュを示している理由を説明しています。いずれにせよ、このアプリは Cookie Manager を使用しなくなったので、その行を削除するだけで済みました。

私のアプリが例とは異なることをしなければならないことを知っていたので、最終的にそれを理解しました。

それがまだ Maps API v2 の Cookie に関係するバグかどうかわかりませんか? おそらくそうではありませんか?私のアプリは、何らかの形で Cookie を間違って処理していた可能性があります。(おそらく、マネージャーをデフォルトとして設定する以外は何もしないことによって)... とにかく、少なくとも問題なく使用できるようになりました!

于 2013-04-26T14:44:00.917 に答える