【问题标题】:setContentView() slow with map fragment地图片段的 setContentView() 速度慢
【发布时间】:2013-01-19 21:13:17
【问题描述】:

我正在开发一个将谷歌地图 (api v2) 显示为片段的应用程序。当应用程序加载时,它会在显示地图之前显示几秒钟的空白屏幕。我使用日志语句查看延迟在哪里,但我不知道为什么它这么慢。

这是我的 onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "onCreate Start -------------------------------");
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate 1 -------------------------------");
    setContentView(R.layout.activity_main);
    Log.i(TAG, "onCreate 2 -------------------------------");
    do_async_setup();
    Log.i(TAG, "onCreate 3 -------------------------------");
    prefs = getSharedPreferences(PREFS_NAME, 0);
    prefs_editor = prefs.edit();
    Log.i(TAG, "onCreate Finish -------------------------------"); 

这是输出。

01-20 10:05:28.802: I/HeadsUp(19544): onCreate Start -------------------------------
01-20 10:05:28.802: I/HeadsUp(19544): onCreate 1 -------------------------------
01-20 10:05:30.396: I/HeadsUp(19544): onCreate 2 -------------------------------
01-20 10:05:30.396: I/HeadsUp(19544): onCreate 3 -------------------------------
01-20 10:05:30.403: I/HeadsUp(19544): onCreate Finish -------------------------------

您可以看到 setContentView 有 1.5 秒的延迟。这是我的布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"/>

</RelativeLayout>

看起来很糟糕,就像应用在加载时冻结一样。我怎样才能加快速度或隐藏延迟?

谢谢,

【问题讨论】:

  • 使用 Traceview 找出问题所在。
  • @CommonsWare ,如果我正确阅读它,它会告诉我日志告诉我的内容。 setContentView 为 onCreate 方法使用了大约 44% 的“时间”。包括实时说 3211.060 我假设是毫秒?另外,它是 ActionBarSherlockNative.setContentView() 这可能是加载 xml 等速度如此缓慢的原因吗?通过运行时间最长的子方法,我得到了 LayoutInflater.createViewFromTag 和几个步骤 SupportMapFragment.onCreateView() 仍然在 1998 毫秒,然后进入更多的谷歌 gms 代码。所以它看起来像谷歌地图片段。看起来对吗?
  • 嗯,最有可能的罪魁祸首是地图,所以我想这并不奇怪。话虽如此,这也表明您可能只是被卡住了。您在哪种硬件上运行它?
  • @CommonsWare 它在 Galaxy nexus 手机上运行。我想你是对的。同一设备上的护目镜地图应用程序也有类似的延迟。我曾考虑用启动对话框覆盖它,但直到延迟之后才会显示它,所以这毫无意义,而且我不想要任何启动屏幕。不调试时也更快。
  • @CommonsWare:我不确定。但是这可能是因为互联网连接速度吗?

标签: android android-layout android-maps-v2


【解决方案1】:

这是使用 GLSurfaceView(例如 Android 中的新地图 v2)的一个缺点。延迟是由 GLSurfaceView 的初始化引起的。请参阅此处http://code.google.com/p/gmaps-api-issues/issues/detail?id=4639,以获得来自 Googler 和 sn-p 的帖子 #5 附近的简要说明,以帮助解决这个问题(一点点)。请为该问题加注星标以提高其优先级。

【讨论】:

  • 谢谢,这证实了我。
【解决方案2】:

我发现如果您连接了调试会话,这可能会很慢,但如果您没有连接,通常是更可接受的速度。如果它在断开 USB 电缆的情况下运行得更快,这可能就是原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多