【问题标题】:MapFragment - The application may be doing too much work on its main threadMapFragment - 应用程序可能在其主线程上做了太多工作
【发布时间】:2015-08-14 13:54:40
【问题描述】:

我遇到了以下错误

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

对此进行了研究...确保一切都尽可能使用 Runnables 在新线程中开始。但不断收到错误。我几乎评论了我所有的代码,当我开始一项新活动时仍然得到它。然后我从我的第一个活动中评论了这个 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"
    />

我从 Google Maps API for Android 文档中得到了这个……有点奇怪,它没有经过优化。如何确保错误消失?我可以延迟 mapFragment 的加载吗?

一旦我打开 Activity 一次......然后再次重新打开它,警告就消失了,因为它已经在内存中......但我希望拥有尽可能优化的应用程序。

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

【问题讨论】:

  • 没有代码在运行。没有一条线。只有视图的负载,它是导致警告的片段 xml。如果我取消注释代码,那么我的所有代码都在不同的线程中,一个在 AsyncTask 中,所以没关系。
  • 如果你显示你的java代码我可以帮助你
  • @LahiruPrasanna 这是一个闭源项目。我只能展示我现在展示的部分。没有可显示的代码。创建一个新的空项目,放入一个mapfragment(只是上面粘贴的代码),你会发现它在主线程警告上做了太多的工作。

标签: java android multithreading mapfragment


【解决方案1】:

setContentView() slow with map fragment

这包含答案。深深地隐藏在谷歌中,却发现了!

【讨论】:

    【解决方案2】:

    这样试试

    getMapAsync(OnMapReadyCallback callback) 您可以设置 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"));
    } 
    

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多