如何停止正在运行的runOnUiThread

时间:2019-08-28 20:09:06

标签: runnable osmdroid osmbonuspack

我希望能够打开和关闭MyLocationNewOverlay。我当前的代码是:-

    void btnTrack() {
        btnTrack = (Button) findViewById(R.id.btnStart);

        btnTrack.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            String btnText = btnTrack.getText().toString();
            GpsMyLocationProvider provider = new GpsMyLocationProvider(ctx);
            provider.addLocationSource(LocationManager.NETWORK_PROVIDER);
            // My Location Overlay
            MyLocationNewOverlay mysLocationoverlay = new MyLocationNewOverlay(provider, map);

            if (btnText.equalsIgnoreCase("Start")) {
                /**************************************************************************
                 *      Get and display the current location
                 **************************************************************************/

                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

                mysLocationoverlay.enableMyLocation(); // not on by default
                mysLocationoverlay.setDirectionArrow(BitmapFactory.decodeResource(getResources(),
                        R.drawable.marker_node), BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi_default));
                mysLocationoverlay.runOnFirstFix(new Runnable() {
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                btnTrack.setText("CANCEL");
                            }
                        });
                    }
                });

                map.getOverlays().add(mysLocationoverlay);
            }
            else {
                mysLocationoverlay.disableMyLocation();
                mysLocationoverlay.disableFollowLocation();
                map.getOverlays().remove(mysLocationoverlay);
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                btnTrack.setText("START");
            }
        }
    });
}

我很确定问题是可运行的,但是当我将按钮切换到“取消”按钮时,我看不到任何终止它的方法。

我正在使用osmdroid v6.1.0和osmbonuspack v6.6.0

如何停止可运行文件?

1 个答案:

答案 0 :(得分:1)

每次单击按钮时,您将创建MyLocationNewOverlay的本地实例。

首次单击该按钮时,将创建,激活MyLocationNewOverlay实例并将其添加到地图视图中。

第二次单击该按钮时,将创建另一个新的MyLocationOverlay实例。该新实例已停用,并从地图视图中删除-很好,不是真的,因为它从未被激活或添加。

我建议在您的活动中保留对MyLocationOverlay实例的引用(或断断续续,视情况而定),并仅在第一次单击按钮时创建它(检查是否为空)。