2015-08-14 23 views
1

的工作太多了,我有以下错误MapFragment - 应用程序可以做它的主线程

Skipped 40 frames! The application may be doing too much work on its main thread. 

有关研究之吧...确信一切都在新线程开始尽可能用的Runnable。但不断收到错误。我几乎评论了我的所有代码,并且在开始新活动时仍然可以使用它。然后我从我的第一个活动中评论这个mapfragment,并且错误消失了。 因此,错误是由下面的代码引起的:

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

我得到这个从谷歌地图API的Android文档...怪异的种类它不是最优化的。我怎样才能确保错误消失?我可以延迟mapFragment的负载吗?

一旦我打开活动一次...并重新打开它,警告已经消失,因为它已经在内存中了......但是我希望有最佳优化的应用程序。

为了避免混淆这是setContentView导致延迟,因为mapFragment在此函数中加载。延迟会引发警告。我的问题:我如何加快setContentView,以便在打开活动后预先加载或加载mapFragment。

+0

有没有运行任何代码。没有一条线。只有视图的负载,它是导致警告的片段xml。如果我取消注释代码,那么我所有的代码都在不同的线程中,一个在AsyncTask中,所以没关系。 –

+0

如果你显示你的java代码,我可以帮你 –

+0

@LahiruPrasanna它是一个封闭的源代码项目。我只能展示我现在展示的部分。没有代码可以显示。制作一个新的空白项目,放入一个mapfragment(只是上面粘贴的代码),你会发现它对主线程警告提供了太多的工作。 –

回答

0

尝试这样

getMapAsync(OnMapReadyCallback回调),您可以设置侦听时GoogleMap的准备

public class MainActivity extends FragmentActivity 
    implements OnMapReadyCallback { 
... 
} 
@Override 
public void onMapReady(GoogleMap map) { 
    map.addMarker(new MarkerOptions() 
     .position(new LatLng(0, 0)) 
     .title("Marker")); 
} 
相关问题