0

我最近被催促更新我的应用程序以使用谷歌地图 API v2。(谷歌最终停止为 v1 授予 API 密钥。)我已经实现了新的 api,使其与我的应用程序之前的工作方式相同,令我满意。除了,我注意到发生了一个奇怪的错误。

当我转到我使用 SupportMapFragment 的活动时,按返回返回上一个活动,然后再次前进到 SupportMapFragment 活动,它会随机崩溃......有时很快,有时需要一分钟。唯一改变的是我正在使用新的 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 活动后打开和关闭屏幕,它似乎会更快地崩溃......

我知道这与两次启动活动有关,但我在任何地方都看不到任何会导致这种奇怪崩溃的东西,另外,它并没有在 v1 上发生...... bleh。

已经多次尝试谷歌试图找出它......

此外,如果这有帮助,异常似乎发生在 bk.run() 的单独线程中,如堆栈跟踪中所述,但我的应用程序继续在我的设备上运行,而它在 eclipse 中暂停,直到我让该线程去然后应用程序实际上崩溃了。

我还确认,当我使用地图片段两次进入活动时会发生崩溃,即使我从未对地图做任何事情,甚至在 SupportMapFragment 上调用 getMap(),所以它肯定是某种问题地图片段或加载谷歌地图。旋转时也会崩溃(因为重新创建了活动。)

4

1 回答 1

0

事实证明,问题是由我的应用程序启动时执行以下行引起的:

CookieHandler.setDefault(new CustomCookieManager());

然后,如果该行之前已执行,则地图将在第二次进入活动后崩溃。

这就解释了为什么堆栈跟踪显示在 addCookies 处发生的崩溃。无论如何,该应用程序甚至不再使用 Cookie 管理器,所以我所要做的就是去掉那条线。

我知道这一定是我的应用程序所做的与示例不同,最后我弄明白了。

不知道这是否仍然是地图 api v2 中与 cookie 相关的错误?可能不是?我的应用程序可能以某种方式错误地处理了 cookie。(除了将其设置为默认值外,可能不与经理做任何事情)......无论如何,现在至少我可以毫无问题地使用它们!

于 2013-04-26T14:44:00.917 回答