Проблема с производительностью на Android MapView Navigation-App - PullRequest
1 голос
/ 15 июня 2010

У меня вопрос о том, как сделать навигационное приложение более быстрым и стабильным.

Основной слой моего приложения - это простой вид карты, покрытый несколькими наложениями (2 маркера для начала и пункта назначения и один для маршрута).

Моя идея - реализовать поток для отображения маршрута, чтобы приложение не зависало при вычислении более сложного маршрута (как это происходит сейчас).

После реализации потока больше нет обновлений, может быть, вы можете помочь мне коротко взглянуть на выдержку из моего кода ниже:

    private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location loc) {
        posUser = new GeoPoint((int) (loc.getLatitude() * 1E6), (int) (loc
                .getLongitude() * 1E6));

        new Thread(){
        public void run(){
            mapView.invalidate();

            // Erase old overlays
            mapView.getOverlays().clear();

            // Draw updated overlay elements and adjust basic map settings
            updateText();
            if(firstRefresh){
                adjustMap();
                firstRefresh = false;
            }
            getAndPaintRoute();
            drawMarkers();
        }
        };
    }

Некоторые функции суммированы с таким методом, как "drawMarkers ()" или "updateText ()" ... (они не требуют больше внимания; -))

Ответы [ 4 ]

2 голосов
/ 15 июня 2010

Когда вы на самом деле просите, чтобы поток запустил ? Я вижу только код для создания этого. Если вы это сделаете, вы обнаружите, что только основной поток (UI) может обновляться, как отмечает RPond.

Вместо этого отделите свою работу и отправьте результаты обратно в главный поток через обработчик .

0 голосов
/ 15 января 2011

Можно было бы надеяться, что вы не используете Google MapView для визуализации своей навигации, поскольку из моего прочтения условий и положений навигация не включена в политику допустимого использования.

Из Условий предоставления услуг API Карт Google

В соответствии с настоящим Разделом 8 вы не должны (и не можете разрешать кому-либо другому):

...

8,7. использовать Сервис или Контент с любыми продуктами, системами или приложениями для или в связи с (a) навигацией в реальном времени или навигацией по маршруту, основанной на вводе положения с датчика (включая, но не ограничиваясь, любой визуальный или звуковой пошаговый маршрут руководство);

...

0 голосов
/ 15 июня 2010

Я, возможно, здесь лаю не то дерево, но я думаю, что это связано с тем, что вы вносите изменения в MapView в потоке, который не является потоком пользовательского интерфейса.

Я ожидаю, что это приведет к одной из следующих возможностей:

  • Ваши изменения вызывают исключение, которое вы не видите (возможно, снова, потому что оно в другом потоке)
  • Ваши изменения игнорируются, потому что они сделаны не в том потоке.
  • Карта обновляется, но ваш поток пользовательского интерфейса не знает, что ей нужно перерисовать карту.

Надеюсь, это поможет - по крайней мере, указав вам неопределенно правильное направление.

0 голосов
/ 15 июня 2010

Вы можете обновить пользовательский интерфейс только в потоке пользовательского интерфейса, так что я думаю, что это проблема. Прочтите эту статью о многопоточности для решения этой проблемы.

...