【问题标题】:Accessing GoogleMap from outside the UI thread in Android从 Android 的 UI 线程外部访问 GoogleMap
【发布时间】:2015-01-13 14:21:33
【问题描述】:

我正在为我的 android 应用程序使用 Google Map Android API v2。在那里,我在 onCreate 中按如下方式初始化了 GoogleMap

SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
mGoogleMap = fm.getMap();

在我的应用程序中,我需要执行一些后台任务,为此我正在使用 AsybcTask。在完成后台任务的同时,我想更新地图。请参考以下示例。

@Override
    protected Void doInBackground(Void...voids) {
        while(Condition)
        {
            mGoogleMap.clear();
            mGoogleMap.addMarker(marker);
            Thread.sleep(5000);
        }
     }

我知道我无法在 doInBackground 方法中直接访问 UI 组件。可以通过将应用程序的上下文解析到 AsyncTask 类来访问常见的 UI 组件,如按钮、编辑文本、文本视图。但我想不出从 doInBackground 方法访问 GoogleMap 的方法。能否请您给我一个解决方案。

【问题讨论】:

    标签: android google-maps android-asynctask


    【解决方案1】:

    如果您的AsyncTaskActivity 的一部分,您可以简单地使用runOnUiThread 方法,如下所示:

    @Override
        protected Void doInBackground(Void...voids) {
            while(Condition)
            {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mGoogleMap.clear();
                        mGoogleMap.addMarker(marker);
                        Thread.sleep(5000);
                    }
                });
            }
         }
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    • 最好在runOnUiThread(...)之外添加Thread.sleep(5000)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多