Форум программистов, компьютерный форум CyberForum.ru

Ошибка OutOfMemory в Service - Android

Восстановить пароль Регистрация
 
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,516
Записей в блоге: 2
21.11.2016, 12:04     Ошибка OutOfMemory в Service #1
Используется
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();
        }
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 12:04     Ошибка OutOfMemory в Service
Посмотрите здесь:

OutOfMemory при создании большого Bitmap Android
google map v2 outOfMemory Android
Android OutOfMemory error while scaling big images Android
Android Fragments и service
Android App Service
Автозагрузка Service Android
SQLite из Service Android
Работа с Service Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1785 / 1519 / 471
Регистрация: 12.05.2014
Сообщений: 5,544
Завершенные тесты: 1
21.11.2016, 12:08     Ошибка OutOfMemory в Service #2
раз 8 сек создается ретрофит-адаптер...каждый раз новый
и каждые 8 сек делается запрос, который х.з. успевает ли выполнится за эти 8 сек

сам как думаешь, может закончится память?
OlegJV
 Аватар для OlegJV
98 / 98 / 29
Регистрация: 13.03.2016
Сообщений: 444
21.11.2016, 12:38     Ошибка OutOfMemory в Service #3
Что мешает запустить сервис один раз, а потом передавать в него данные. Через Intent например.
ILNAR_93
Android
212 / 212 / 21
Регистрация: 19.01.2013
Сообщений: 1,516
Записей в блоге: 2
21.11.2016, 12:44  [ТС]     Ошибка OutOfMemory в Service #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 не выполняется у сервиса
Yandex
Объявления
21.11.2016, 12:44     Ошибка OutOfMemory в Service
Ответ Создать тему
Опции темы

Текущее время: 22:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru