- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以通常方式实现的 Google map ,调用 MapFragment 的 getMapAsync() 然后等待调用 onMapReady() 以提供 GoogleMap 实例。在我添加代码以等待调用 onMapReady() 以确保 GoogleMap 实例在继续之前可用之前,一切正常。
在 getMapAsync() 返回和 onMapReady() 被调用之间有一小段时间(有道理——否则它不需要异步)。尽管在我的非正式测试中,延迟往往少于半秒,但我想处理延迟可能更长的情况。
考虑到这个目标,我添加了一个简单的等待循环来阻塞名为“map_ready”的变量。 map_ready 最初是假的,它被 onMapReady() 设置为真。 waitForGoogleMap() 方法简单地循环,定期测试变量并仅在变量变为真时返回。这是代码大纲。
static boolean map_ready = false;
private void init_gmap_fragment(Activity a) {
[...]
MapFragment f_new = new MapFragment();
[...]
f_new.getMapAsync(this);
waitForGoogleMap();
}
synchronized private void waitForGoogleMap() {
while (!map_ready) {
Log.d(LOGTAG, "Waiting for GoogleMap...");
try {
wait(1000);
} catch (Exception e) { Log.d(LOGTAG, "Exception!"); }
}
}
public void onMapReady(GoogleMap gmap) {
try {
this.gmap = gmap;
map_ready = true;
}
[...]
}
如上所示的代码一遍又一遍地打印出“Waiting for GoogleMap...”——运行 waitForGoogleMap() 似乎阻止了 onMapReady() 被调用。如果我注释掉对 waitForGoogleMap() 的调用,它运行得很好。
我做错了什么?
更新/澄清:我认为我面临的核心问题是我想监听一个预计会与监听器在同一线程上发生的事件。在这种情况下,waitForGoogleMap() 正在等待事件“onMapReady() called”并且两者都在主线程上。
我假设像 onMapReady() 这样的回调是通过创建一个工作线程来实现的,该工作线程执行必要的工作,然后调用主线程的 Handler 将回调(例如,onMapReady())添加到主线程的 MessageQueue .此外,当我从主线程调用 wait() 时,主线程的循环程序将借此机会执行其队列中的另一个项目。
但显然我错了:-)。
底线:如何在 onMapReady() 执行之前阻塞?
谢谢,巴里
附言以上是我的代码的简化版本。实现 OnMapReadyCallback(以及因此实现 onMapReady() 回调)的包含类实际上是一个单例。实例是使用 Instance() 方法创建的,随后通过单独的 getInstance() 方法获取实例。一旦成功,我将在 getInstance() 方法中调用 waitForGoogleMap() 。这样,除非绝对需要,否则应用程序不会阻塞。
最佳答案
What am I doing wrong?
waitForGoogleMap()
运行在 onMapReady()
应该被调用的同一线程上,因此 onMapReady()
不能被调用直到 waitForGoogleMap()
返回。
摆脱 waitForGoogleMap()
。在 onMapReady()
中开始需要 GoogleMap
的工作。如果需要,使用事件总线来获得“嘿, map 准备好了!”事件转移到其他组件。
关于android - 等待调用 onMapReady(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596678/
我尝试将 OnMapReadyCallback 设置为获取 map 异步参数。但是android告诉我它需要GoogleMap对象,在文档中onMapReady()是无效的。代码如下 private
我有三项 Activity : 主要 Activity : public void start_main_map(View view) { Intent intent = new In
我有一个以通常方式实现的 Google map ,调用 MapFragment 的 getMapAsync() 然后等待调用 onMapReady() 以提供 GoogleMap 实例。在我添加代码以
当我使用 Retrofit 从服务器调用 lon,lat 时,数据就在这里; 双经度,纬度; NetworkEngine.getInstance().getResDetail(id, new Call
我正在构建一个与谷歌地图相关的应用程序。在此我试图在 fragment 中实现 map 。我在 OnMapReady 方法中操作 map 。但是应用程序没有调用 OnMapReady 方法。我在 Ac
我正在做一个使用谷歌地图的项目,最近我遇到了一个不合理的问题。 这是我的 onMapReady 回调: @Override public void onMapReady(GoogleMap goog
我想从onResume中调用onMapReady方法,问题是它有 (GoogleMap map) 我不能这样调用它 onMapReady(); 这是方法 @Override public void o
我有一个 fragment (fragment_search),我想在其中以编程方式添加另一个 fragment (map_fragment),但我遇到了一个问题,其中 tab_content.onR
我对 onMapReady 有疑问。当我传递这样的地址时: LatLng myAddressCoordinates = getLocationFromAddress("Piazza Ferretto
我有一个正在开发中的 android 应用程序,它使用这个 google maps api v2。要使用 onMapReady callback 获取 google map im 的实例.在这个回调中
谁能解释一下 OnMapReadyCallback.OnMapReady(GoogleMap googleMap) 和 GoogleMap.OnMapLoadedCallback.OnMapLoade
我想在我的一个 View 中集成 map View 。 我已经生成了一个新的 map fragment 。它以不同的视角出现,并且很有魅力。 然后我尝试将代码集成到一个正常的 Activity 中(一
我正在尝试在 fragment 中实现 map ,我能够显示 map ,但 onMapReady 没有工作,因为它没有添加标记也没有移动相机。代码 map fragment class MapFrag
我正在构建一个跟踪 map ,其中包含两个标记,一个是当前位置,第二个是从数据库服务器获取其 LatLng,它在两周内运行良好,现在它只显示没有任何标记的 map ,当我尝试调试应用程序并向 onMa
我正在尝试在 Android 应用程序中使用 Google map API v2 显示一个简单的 map 。我正在关注 Map API Documentation指示。但我认为 onMapReady
您好开发人员, 我在 android studio 中使用 google map Activity 创建了一个 map ,我的类扩展了 AppCompactActivity,因为我想使用工具栏。当运行
所以我遇到的问题是我不确定如何访问 map 来设置初始位置。 Fragment 总是返回 NULL,所以它似乎没有调用 getMapReady 函数。我只是不确定如何在布局中正确引用 map 小部件,
我创建了一个基本的 Android 应用程序,旨在提供一张 map ,上面有一个汉堡抽屉。每个汉堡菜单选项都将在 GoogleMap 对象上运行对象方法。 问题是,当汉堡抽屉创建并工作时, map 的
在我的 Google map 初始化后,我试图从设备屏幕上的可见区域获取 LatLngBounds。但是我只收到 0 值。我的猜测是即使在调用 OnMapReady 之后, map 实际上还没有加载。
我在一个 android 项目中同时拥有 GMS 和 HMS。 GMS 版本有效,但 HMS 不调用 onMapReady 回调。这是代码: private var mMap: HuaweiM
我是一名优秀的程序员,十分优秀!