在Android中从UI线程外访问GoogleMap

5

我正在使用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组件。像按钮、编辑框和文本视图这样的常见UI组件可以通过将应用程序的上下文解析到AsyncTask类中来访问。但我找不到一种方法从doInBackground方法中访问GoogleMap。你能给我一个解决方案吗?

1个回答

7

如果你的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);
                }
            });
        }
     }

谢谢。运行得很好。 - ANJ
4
最好将Thread.sleep(5000)放在runOnUiThread(...)之外。 - ANJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接