Google 的 SupportMapFragment MapView 在从另一个 Fragment 弹出后性能低下
Google's SupportMapFragment MapView low performance after poping back from another Fragment
从堆栈返回后,SupportMapFragment 滞后并且整体性能不佳。
问题很奇怪,因为我使用导航图进行导航,但问题并不总是存在。以下是两种不同的场景:
MapFragment -> AnotherFragment(通过 ActionBar 菜单项) -> Mapfragment
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
onNavDestinationSelected(item!!, navController)
return super.onOptionsItemSelected(item)
}
在这种情况下,MapFragment 在按下 AnotherFragment 中的后退按钮后滞后
MapFragment -> AnotherFragment(通过默认按钮) -> Mapfragment
navController.navigate(R.id.action_mapFragment_to_anotherFragment)
在这种情况下,MapFragment 正常运行。
我曾尝试在 onOptionsItemSelected(item: MenuItem?)
中使用 navController.navigate(R.id.action_mapFragment_to_anotherFragment)
,但我得到了相同的结果。
我也知道 this 有同样问题的问题,但在完全不同的情况下,答案也不是很有帮助。
所以问题不在于 Mapfragment 或 Google 的 SupportMapFragment,而是某种 Android UI 错误。我能够避免它,我想分享解决方案。
问题本身出在ActionBar的导航上,原来的设置是这样的。在res/menu/menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:title="@string/about"
android:id="@+id/options_more"
android:icon="@drawable/ic_baseline_more_vert_24px"
android:orderInCategory="100"
app:showAsAction="always" />
<menu>
<item
android:id="@+id/anotherFragment"
android:title="@string/another_menu_title" />
<item
android:id="@+id/alsoAnotherFragment"
android:title="@string/alsoanother_menu_title" />
</menu>
</item>
</menu>
在这种情况下,当点击右上角的菜单项时,会出现一个下拉菜单(其中包含另外两个项目)。
当我使用这样的布局时,发生了滞后。经过几个小时的反复试验,我将下拉菜单分成两个单独的按钮,如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/anotherFragment"
android:icon="@drawable/ic_baseline_location_city_24px"
android:title="@string/about"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/alsoAnotherFragment"
android:icon="@drawable/ic_baseline_more_vert_24px"
android:title="@string/about"
app:showAsAction="ifRoom"/>
</menu>
所以下拉菜单已经关闭,问题现在已经解决了。一切正常,滞后消失了。我真的不明白问题的根源是什么,但我认为它必须有某种解释。
从堆栈返回后,SupportMapFragment 滞后并且整体性能不佳。
问题很奇怪,因为我使用导航图进行导航,但问题并不总是存在。以下是两种不同的场景:
MapFragment -> AnotherFragment(通过 ActionBar 菜单项) -> Mapfragment
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
onNavDestinationSelected(item!!, navController)
return super.onOptionsItemSelected(item)
}
在这种情况下,MapFragment 在按下 AnotherFragment 中的后退按钮后滞后
MapFragment -> AnotherFragment(通过默认按钮) -> Mapfragment
navController.navigate(R.id.action_mapFragment_to_anotherFragment)
在这种情况下,MapFragment 正常运行。
我曾尝试在 onOptionsItemSelected(item: MenuItem?)
中使用 navController.navigate(R.id.action_mapFragment_to_anotherFragment)
,但我得到了相同的结果。
我也知道 this 有同样问题的问题,但在完全不同的情况下,答案也不是很有帮助。
所以问题不在于 Mapfragment 或 Google 的 SupportMapFragment,而是某种 Android UI 错误。我能够避免它,我想分享解决方案。
问题本身出在ActionBar的导航上,原来的设置是这样的。在res/menu/menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:title="@string/about"
android:id="@+id/options_more"
android:icon="@drawable/ic_baseline_more_vert_24px"
android:orderInCategory="100"
app:showAsAction="always" />
<menu>
<item
android:id="@+id/anotherFragment"
android:title="@string/another_menu_title" />
<item
android:id="@+id/alsoAnotherFragment"
android:title="@string/alsoanother_menu_title" />
</menu>
</item>
</menu>
在这种情况下,当点击右上角的菜单项时,会出现一个下拉菜单(其中包含另外两个项目)。
当我使用这样的布局时,发生了滞后。经过几个小时的反复试验,我将下拉菜单分成两个单独的按钮,如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/anotherFragment"
android:icon="@drawable/ic_baseline_location_city_24px"
android:title="@string/about"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/alsoAnotherFragment"
android:icon="@drawable/ic_baseline_more_vert_24px"
android:title="@string/about"
app:showAsAction="ifRoom"/>
</menu>
所以下拉菜单已经关闭,问题现在已经解决了。一切正常,滞后消失了。我真的不明白问题的根源是什么,但我认为它必须有某种解释。