【发布时间】: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