Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
237 / 237 / 49
Регистрация: 19.01.2013
Сообщений: 1,870
Записей в блоге: 3
#1

Ошибка OutOfMemory в Service

21.11.2016, 12:04. Просмотров 363. Ответов 3
Метки нет (Все метки)

Используется
Retrofit и GsonConverterFactory


Есть фрагнмент поиска, при открытии запускается сервис и периодически(8 секунд) получает json - до выполнения условия, а во фрагменте ProgressBar.

При каждом получении данных
запускаю Service для актуализации данных в сервисе

Java
1
2
3
4
5
Intent service = new Intent(ctx, find.class);
                                    service.putExtra(Constants.OPEN, false);
                                    service.putExtra(Constants.INFO_TYPE, 1);
                                    service.putExtra(Constants.Serializable_CLASS, response.body().Data);
                                    context.startService(service);

в сервисе актуализирую данные след образом

Java
1
2
3
4
5
6
7
8
9
 for(int i = 0; i< List.size(); i++){
            if (List.get(i).Id.equalsIgnoreCase(fiClass.Id)){
                List.set(i, fiClass);
                Log.d("service", "Изменил "+fiClass.Id);
                return;
            }
        }
        Log.d("service", "Добавил "+fiClass.Id);
        List.add(fiClass);

Минуту работает и валится..OutOfMemory. Что делаю не так?

Добавлено через 14 минут
XML
1
2
3
4
5
6
7
8
9
10
11
FATAL EXCEPTION: main
                                                                  Process: su.el_teh.taxiya, PID: 32694
                                                                  java.lang.OutOfMemoryError: Could not allocate JNI Env
                                                                      at java.lang.Thread.nativeCreate(Native Method)
                                                                      at java.lang.Thread.start(Thread.java:1063)
                                                                      at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:921)
                                                                      at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1339)
                                                                      at com.squareup.okhttp.Dispatcher.enqueue(Dispatcher.java:110)
                                                                      at com.squareup.okhttp.Call.enqueue(Call.java:113)
                                                                      at com.squareup.okhttp.Call.enqueue(Call.java:105)
                                                                      at retrofit.OkHttpCall.enqueue(OkHttpCall.java:70)
Добавлено через 44 минуты
В сервисе создается RespClass один раз при создании сервиса и вызывается метод create - периодичностью 8 секунд.

из-за этого может быть OutOfMemory?


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 public class RespClass {
 
 
public void create(Model model){
            Retrofit restAdapter = new Retrofit.Builder()
                .baseUrl(singleton.serverURL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        restAdapter.client().setReadTimeout(60, TimeUnit.SECONDS);
        restAdapter.client().setConnectTimeout(10, TimeUnit.SECONDS);
        TaxiAPI post = restAdapter.create(TaxiAPI.class);
        try {
            post.create(model).enqueue(new retrofit.Callback<Apig>() {
                @Override
                public void onResponse(retrofit.Response<Apig> response, Retrofit retrofit) {
                   
                }
 
                @Override
                public void onFailure(Throwable t) {
                    Log.d("TX", "ERRORRR " + t.getMessage());
                   }
            });
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 12:04
Ответы с готовыми решениями:

google map v2 outOfMemory
Подскажите пожалуйста, в чём может быть проблема. При перемещении карты google...

OutOfMemory при создании большого Bitmap
Всем привет! Пытаюсь создать Bitmap размером 5120 * 2600 точек, на что отладчик...

Android OutOfMemory error while scaling big images
Добрый день! Буду благодарна, если поможете решить небольшую проблемку. ...

Service
Как создать приложение как Service?

GPS service
Написал сервис для работы GPS однако при попытке вытащить данные просто выдаёт...

3
Pablito
2665 / 2147 / 729
Регистрация: 12.05.2014
Сообщений: 7,500
Завершенные тесты: 1
21.11.2016, 12:08 #2
раз 8 сек создается ретрофит-адаптер...каждый раз новый
и каждые 8 сек делается запрос, который х.з. успевает ли выполнится за эти 8 сек

сам как думаешь, может закончится память?
1
OlegJV
103 / 103 / 28
Регистрация: 13.03.2016
Сообщений: 474
21.11.2016, 12:38 #3
Что мешает запустить сервис один раз, а потом передавать в него данные. Через Intent например.
1
ILNAR_93
Android
237 / 237 / 49
Регистрация: 19.01.2013
Сообщений: 1,870
Записей в блоге: 3
21.11.2016, 12:44  [ТС] #4
Паблито,
Когда из активности вызывался метод такого не было..

хорошо, понял что лучше будет если адаптер создать где-то выше один раз, а как быть с

Цитата Сообщение от Паблито Посмотреть сообщение
успевает ли выполнится за эти 8 сек

Сейчас я имею:

таймер на 8 секунд и в таймере выполняется следующее

for (int i = o; i<list.size();i++{
RespClass.create(model);
}

Можно обойтись без таймера? чтобы цикл выполнялся последовательно?

Добавлено через 1 минуту
Цитата Сообщение от OlegJV Посмотреть сообщение
Что мешает запустить сервис один раз, а потом передавать в него данные. Через Intent например.
Я не так делаю? Мешает незнание всех методов передачи данных в сервис

Цитата Сообщение от ILNAR_93 Посмотреть сообщение
запускаю Service для актуализации данных в сервисе


Java
1
2
3
4
5
Intent service = new Intent(ctx, find.class);
service.putExtra(Constants.OPEN, false);
service.putExtra(Constants.INFO_TYPE, 1);
service.putExtra(Constants.Serializable_CLASS, response.body().Data);
context.startService(service);
Насколько я знаю сервис создается только 1 раз, а далее уже onCreate не выполняется у сервиса
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2016, 12:44

Автозагрузка Service
Привет, люди! Давно бьюсь с автозапуском сервисов. Скиньте, пожалуйста РАБОЧИЙ...

App Service
Возможно ли как-то создать приложение, которое запускает сервис и при этом,...

Работа с Service
Всем добрый вечер! Есть приложение под андроид. С активити, с интерфейсом,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru