2

我有一个带有 TabActivity 的 android 应用程序,其中包含 4 个选项卡 - 一个列表视图、一个地图视图、另一个列表和一个 web 视图。从列表视图中,我可以点击一个项目并启动另一个活动,按下返回返回选项卡活动。

但是,一旦访问了地图视图选项卡,从列表视图导航到第二个活动,然后按后退按钮会导致大约 3-4 秒的挂起。一旦访问了地图视图,这个问题就永远不会消失,直到应用程序退出。

还有一些注意事项:

  • 地图视图还可以启动另一个活动 - 在这种情况下,后退按钮可以正常工作 - 只有在启动第二个活动时地图视图选项卡处于非活动状态时才会出现问题。
  • 在两台设备上进行测试 - Galaxy S 上出现问题,Nexys 7 上没有出现问题。
  • 我可以看到 logcat 中没有任何明显的东西。
  • 应用程序使用 Maps API V2,并支持库以支持片段。
  • 应用程序是用 Mono 编写的。

更多信息。我在地图活动中为它的生命周期事件添加了一些日志消息:

从地图选项卡切换:

02-12 18:53:43.841 I/MAPTEST ( 5031): OnSaveInstanceState
02-12 18:53:43.857 I/MAPTEST ( 5031): OnPause

从列表视图选项卡启动第二个活动:

02-12 18:54:06.900 I/MAPTEST ( 5031): OnSaveInstanceState
virtual void WebCore::Widget::show()
virtual void WebCore::Widget::show()
void WebCore::ScriptController::updatePlatformScriptObjects()
virtual void WebCore::Widget::show()
static bool WebCore::ResourceHandle::supportsBufferedData()
static bool WebCore::ResourceHandle::supportsBufferedData()
02-12 18:54:07.353 I/MAPTEST ( 5031): OnStop

从第二个活动按下后退按钮(即:暂停发生时):

-- Absolutely nothing in log cat --

切换回地图选项卡:

02-12 18:54:59.056 I/MAPTEST ( 5031): OnRestart
02-12 18:54:59.060 I/MAPTEST ( 5031): OnStart
02-12 18:54:59.064 I/MAPTEST ( 5031): OnResume

什么可能导致返回活动阻塞 3-4 秒?

或者,我还能做些什么来诊断这个?


更多信息:

根据 michal-z 的评论,在 DDMS 下对其进行了分析,并且大部分时间都花在了消息发送、布局和绘图上……所以我怀疑某种递归布局或绘图问题……

另外,我尝试在地图活动停止时删除地图片段,并在地图活动开始时将其添加回来,这解决了延迟问题,但地图不记得它的状态,丢失所有标记并且重新出现很慢。


另一个跟进:

我能找到的唯一解决方案是在活动停止时删除片段并在恢复时将其添加回来 - 并保存相机位置。我还尝试通过片段管理器和直接在地图视图上隐藏和重新显示片段 - 不走运。

4

0 回答 0