Alf*_*sch 2 java android google-maps
在默认情况下SupportMapFragment,当Fragment被即时化时,正在加载和创建MapView,从而在主线程上执行繁重的工作.
getMapAsync(this);调用之前发生以下日志,它是主线程冻结约2秒钟的时刻.日志证明以前创建了所有内容getMapAsync().
是不是只有在getMapAsync()调用时才会加载地图?
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Enabling debug mode 0
D/OpenGLRenderer: endAllActiveAnimators on 0xb7966f90 (RippleDrawable) with handle 0xb7988688
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead.
I/zzy: Making Creator dynamically
W/ResourcesManager: Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
W/ResourcesManager: Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
W/art: Suspending all threads took: 5.704ms
D/ChimeraCfgMgr: Loading module com.google.android.gms.maps from APK /data/data/com.google.android.gms/app_chimera/chimera-module-root/module-fcfb08c37b9ca44c48d9936b0e1895ef8b9cffe0/MapsModule.apk
D/ChimeraModuleLdr: Loading module APK /data/data/com.google.android.gms/app_chimera/chimera-module-root/module-fcfb08c37b9ca44c48d9936b0e1895ef8b9cffe0/MapsModule.apk
D/ChimeraFileApk: Primary ABI of requesting process is armeabi-v7a
D/ChimeraFileApk: Classloading successful. Optimized code found.
I/Google Maps Android API: Google Play services client version: 7895000
I/Google Maps Android API: Google Play services package version: 8115236
I/e: Token loaded from file. Expires in: 393978062 ms.
I/e: Scheduling next attempt in 393678 seconds.
I/Choreographer: Skipped 44 frames! The application may be doing too much work on its main thread.
Run Code Online (Sandbox Code Playgroud)
这是片段:
public class StoreMapFragment extends SupportMapFragment
implements OnMapReadyCallback {
private GoogleMap mMap;
public static StoreMapFragment newInstance() {
StoreMapFragment fragment = new StoreMapFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
loadStores();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
public void loadStores() {
if(mMap == null)
return;
// Add markers
}
}
Run Code Online (Sandbox Code Playgroud)
有关:
通过延迟片段实例化来解决.
首先,我在另一个Fragment中添加了SupportMapFragment,然后SupportMapFragment按照此处的建议延迟了实例化.
StoreMapFragment.java
public class StoreMapFragment extends Fragment
implements OnMapReadyCallback {
SupportMapFragment mMapFragment;
private GoogleMap mMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_map, container, false);
if (mMap == null) {
final OnMapReadyCallback listener = this;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isAdded()) {
mMapFragment = new SupportMapFragment();
FragmentManager fm = getChildFragmentManager();
fm.beginTransaction()
.replace(R.id.map, mMapFragment).commit();
mMapFragment.getMapAsync(listener);
}
}
}, 1000);
}
return view;
}
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
loadStores();
}
}
Run Code Online (Sandbox Code Playgroud)
fragment_map.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |