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

В моем классе обслуживания есть метод обратного вызова, который будет вызываться каждую секунду со списком данных, и он непрерывно записывается в JSONArray, как показано ниже.

Этот onDataCapturemethod () вызывается каждую секунду.Так что этот метод будет вызываться 60 раз в минуту и ​​так далее.

private void onDataCapture(List<DataModel> model){
    myJsonArray.put(model);
}

Также у меня есть другой метод планировщика, который будет вызываться один раз каждые 15 секунд.Это возьмет данные из myJsonArray и отправит их на сервер.Затем он очистит массив.Так что этот метод будет вызываться 4 раза в минуту и ​​так далее.

private void storeDataToBackend(){
    for (int i = 0; i < myJsonArray.length(); i++) {
            tempJson.put(myJsonArray.get(i));
    }
    .....
    myJsonArray = new new JSONArray(); // Clearing after storing to backend

}

Моя проблема: иногда я сталкиваюсь с проблемой параллелизма, поскольку здесь происходит одновременное чтение и запись на myJsonArray.Как эффективно решить эту проблему в Android / Java?Пожалуйста, объясните на примере.Дайте мне знать, если потребуется более подробная информация.

Я прошел CopyOnWriteArrayList, и это немного дороже, как упомянуто в документации.Пожалуйста, объясните на примере, что можно сделать в этом случае.

...