当前位置: 首页 > 知识库问答 >
问题:

如何在Android生命周期阶段暂停直到调用回调?

莫兴言
2023-03-14

因此,我希望保存片段的活动在onResume()暂停,直到调用onMapReadyCallback,这样我就可以保证创建了GoogleMap对象,并且可以在活动生命周期中继续。但是,如果我在活动的线程(主线程)中使用任何锁或屏障同步器,线程将阻塞,不会接收任何回调,因此将永远等待。

我试图使用一个对象来实现onMapReadyCallback,并将其放在另一个线程中,但是根据文档,我必须在主线程中有回调。

那么如何让主线程等到回调到达,并防止它运行其生命周期方法???

共有1个答案

楚博雅
2023-03-14

您有两种方法来解决您的问题。一个烂,一个更好。

蹩脚的方式

例如,如果这可以帮助测试目的,那么它可以工作。当map对象为空时,在onresume()方法中调用处理程序#PostDelay方法。这里有一个例子。

@Override
public void onResume(){
    super.onResume();
    doMapStuff();
}

public void doMapStuff()
{
    if (mMap == null) {
        new Handler().postDelayed(new Runnable() {
            public void run() {
                doMapStuff();
            }
        }, 250);
        return;
    }

    // do your stuff on the map here.
}

public void onMapReady(GoogleMap map) {
    mMap = map;
    doMapStuff();
}
    null
@Override
public void onResume(){
    super.onResume();
    doMapStuff();
}

public void doMapStuff()
{
    if (mMap == null)
        return;

    // do your stuff on the map here.
}

public void onMapReady(GoogleMap map) {
    mMap = map;
    doMapStuff();
}
 类似资料:
  • 我已经用maven创建了一个java项目。在我的项目(src/main/resources下)中,有一些资源文件我想复制到目标/类中。 我在pom xml中添加了以下行: 当我运行mvn资源时:通过命令行获取的资源文件正在复制到目标/类中(因此生命周期中的资源阶段正在工作)。然而,当我在cmd中输入mvn install:install时,资源文件并没有被复制到目标/类中。 我得到: 生命周期中的

  • 我可以禁用POM中的特定阶段:Maven生命周期中的禁用阶段。可以从命令行禁用test:是否可以从特定阶段开始mvn生命周期,例如只使用命令行选项编译?

  • Cocos Creator 为组件脚本提供了生命周期的回调函数。用户只要定义特定的回调函数,Creator 就会在特定的时期自动执行相关脚本,用户不需要手工调用它们。 目前提供给用户的生命周期回调函数主要有: onLoad start update lateUpdate onDestroy onEnable onDisable onLoad 组件脚本的初始化阶段,我们提供了 onLoad 回调函数

  • # 生命周期回调 Cocos Creator 3D为组件脚本提供了生命周期的回调函数。用户只要定义特定的回调函数,Creator 3D就会在特定的时期自动执行相关脚本,用户不需要手工调用它们。 目前提供给用户的生命周期回调函数主要有: onLoad start update lateUpdate onDestroy onEnable onDisable onLoad 组件脚本的初始化阶段,我们提

  • Flex应用程序的生命周期 虽然,您可以在不了解应用程序的生命周期阶段的情况下构建Flex应用程序,但了解基本机制是很好的。 事情发生的顺序。 它将帮助您配置功能,例如在运行时加载其他Flex应用程序,以及管理在运行时加载和卸载类库和资产的过程。 充分了解Flex应用程序生命周期将使您能够构建更好的应用程序并对其进行优化,因为您将知道在何处优化运行代码。 例如,如果您需要确保在预加载器期间运行某些

  • 我有几个与Docker在开发阶段的使用相关的问题。 我将提出我认为Docker如何在开发环境中使用的三种不同场景。让我们想象一下,我们正在Java和Spring Boot中创建一个REST API。为此,我需要一个MySQL数据库。 > 第一个场景是让docker compose使用MySQL容器进行开发,生产docker使用MySQL和另一个容器中的Java应用程序(jar)进行组装。为了开发,