Как использовать обработчик потока для многопоточности - PullRequest
0 голосов
/ 24 сентября 2018

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

private void proceedToMoveVehicle(ArrayList<RealTimeDetailsResponce> sourceList, ArrayList<RealTimeDetailsResponce> destinationList) {
    for (int i = 0; i < destinationList.size(); i++) {
        for (int j = 0; j < sourceList.size(); j++) {
            if (destinationList.get(i).getVehicleNo().equalsIgnoreCase(sourceList.get(j).getVehicleNo())) {
                final com.google.maps.model.LatLng vehicleStartPositions = new com.google.maps.model.LatLng(sourceList.get(j).getLatitude(), sourceList.get(j).getLongitude());
                final double destainationLatitude = destinationList.get(i).getLatitude();
                final double destainationLongitude = destinationList.get(i).getLongitude();
                final String vehicleTitle = sourceList.get(j).getVehicleNo();
                final com.google.maps.model.LatLng vehicleEndPositions = new com.google.maps.model.LatLng(destainationLatitude, destainationLongitude);
                final double speedValue = 0.0000;
                if (vehicleStartPositions.lat != vehicleEndPositions.lat || vehicleStartPositions.lng != vehicleEndPositions.lng) {
                    Thread thread = new Thread(new Runnable() {
                        @Override
                        public void run() {
                            getPathyFromDirectionAPiRequestNew(vehicleStartPositions, vehicleEndPositions, vehicleTitle);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    moveVehicle(vehicleTitle, speedValue);
                                }
                            });
                        }
                    });
                    thread.start();
                }
            }
        }
    }
}

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

Я слышал о потоке обработчика Android, в котором мы можемповторно использовать поток, используя Looper.Может кто-нибудь помочь мне сделать это с потоком обработчика.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Поскольку IntentService работает на HandlerThread, я предполагаю, что это ответит на вопрос.

Но проблема с HandlerThread заключается в том, что он работает вне жизненного цикла вашей деятельности (также IntentService), поэтому его нужно правильно почистить, иначе у вас возникнет утечка резьбы.

0 голосов
/ 24 сентября 2018

Попробуйте:

ExecutorService executorService = Executors.newFixedThreadPool(32); // you can number of threads you want

executorService.execute(new Runnable() {
public void run() {
         //do your work1 here
    } 
});

executorService.execute(new Runnable() {
public void run() {
         //do your work2 here and so on..
    } 
});

или вы можете поставить петлю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...