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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 119
#1

Утечка памяти - Программирование Android

13.06.2016, 11:28. Просмотров 384. Ответов 8
Метки нет (Все метки)

Разработал программу, получилась достаточно большая, использует сторонние библиотеки, работает без сбоев, но появилась проблема с утечкой памяти, которую не могу решить. При установке программы, её первом запуске кеш растёт до 48 Мб, а потом практически не изменяется и дальше программа работает в обычном режиме. Не могу понять откуда ноги растут. С какой стороны лучше подойти, с чего начать, где искать утечку? Ещё раз повторюсь. что именно при загрузке и первичной установке такая проблема!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2016, 11:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Утечка памяти (Программирование Android):

Утечка памяти - Программирование Android
Работаю в Android Studio Подскажите как определить утекает ли память при работе с программой или нет. А то знакомые говорят после какого то...

Утечка памяти в Spiner - Программирование Android
Здравствуйте. Создал новый проект в Layout добавил выпадающий список в ресурсы добавил массив значений списка, нового кода 0. Значения...

FragmentActivity -> DialogFragment (утечка памяти) - Программирование Android
Всем привет! Обнаружил у себя такой баг: при повороте экрана - каждый раз увеличивается кол-во вызовов "DF: onCreateView()"... код...

Activity + Service - утечка памяти? - Программирование Android
Всем привет. Подскажите, пожалуйста, когда я запускаю сервис из активити (startService) и мой сервис работает достаточно долго, так...

Android WebView утечка памяти - Программирование Android
При добавлении поддержки JavaScript setJavaScriptEnabled(true), когда перехожу по ссылкам, приложение начинает занимать очень много памяти,...

Утечка памяти при использовании хандлера - Программирование Android
new Handler().postDelayed(new Runnable() { @Override public void run() { textView.setText("" + 666); } },...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2474 / 1919 / 596
Регистрация: 12.05.2014
Сообщений: 6,747
Завершенные тесты: 1
13.06.2016, 11:39 #2
как связано "утечка памяти" и "при первом запуске кеш растёт до 48 Мб, а потом практически не изменяется и дальше программа работает в обычном режиме"?
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 119
13.06.2016, 12:02  [ТС] #3
Паблито, может связано, может нет, но наиболее вероятно, что где-то утечка, поэтому так и назвал тему
Pablito
2474 / 1919 / 596
Регистрация: 12.05.2014
Сообщений: 6,747
Завершенные тесты: 1
13.06.2016, 13:14 #4
Цитата Сообщение от Delphian Посмотреть сообщение
но наиболее вероятно
с чего такой вывод?
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 119
13.06.2016, 14:13  [ТС] #5
Паблито, посмотрел heap size = 17,6MB также Allocated 13,7MB и первая мысль что наверное утечка, как минимум это даёт возможность хоть с какой-то причины начать поиск, так как других идей не было

Добавлено через 7 минут
Ещё хотел уточнить может кто-то знает почему не могу конвертировать DUMP HPROF file?
Ввожу
platform-tools> hprof-conv [-z] d:/dump.hprof d:/outfile.hprof

Получаю ответ:
Usage: hprof-conf [-z] infile outfile

-z: exclude non-app heaps, such as Zygote

Specify '-' for either or both files to use stdin/stdout.

Copyright (C) 2009 The Android Open Source Project

This software is built from source code licensed under the Apache License,
Version 2.0 (the "License"). You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

See the associated NOTICE file for this software for further details.

hprof-conf этой команды нет в platform tools
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
13.06.2016, 15:27 #6
Цитата Сообщение от Delphian Посмотреть сообщение
hprof-conv [-z] d:/dump.hprof d:/outfile.hprof
Сами-то поняли, что написали? Здесь имелось в виду, что ключ -z является необязательным, а вы квадратные скобки рисуете.
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 119
13.06.2016, 15:58  [ТС] #7
CoolMind, изначально я делал

platform-tools> hprof-conv d:/dump.hprof d:/outfile.hprof

разницы не было, такой же ответ получал

Добавлено через 22 минуты
Попробовал запустить полностью пустое приложение, оно заняло 4,29Мб в кеше, потом очищаю кеш, перезапускаю прложение и показывает тоже самое.
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
14.06.2016, 08:19 #8
Delphian, Приложение вываливается с OutOfMemory?
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 119
14.06.2016, 12:06  [ТС] #9
_Night_Scream_, Приложение работает без ошибок. Я взял запустил пустое приложение на другом телефоне Samsung Galaxy GT-I8262 Android 4.1 и кеш равен 0! Запустил вновь на Samsung J1 mini Android 5.0 и кеш равен 4,2MB. Своё приложение на Android 4.1, к сожалению, не могу запустить так как некоторые библиотеки работают только с Android 5.0 и 6.0. Когда запускаю на эмуляторах приложение, тоже есть разница на Android 5.0 получаю сообщение Storage space runnning out, но приложение работает, а на Android 6.0 работает без появления сообщений

Добавлено через 5 минут
Посмотрел кеш на эмоляторах всего 12 KB ничего лишнего нет. Правда всё приложение весит 29,5MB из них само приложение 10,25MB и данные 19,34MB

Добавлено через 1 час 5 минут
Вот мой класс где я работаю с кешем:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class CacheFile {
 
    private static final String TAG = "CacheFile";
    private static final String mFileName="cachefile";
    private static File file;
 
    //Write data into the file
    public static void writeFile(Context context, String data) {
        FileOutputStream outputStream=null;
        String oldData=readFile(context)+data;
        try {
            file = new File(context.getCacheDir(), mFileName);
            outputStream = new FileOutputStream(file);
            if(data!=null) {
                outputStream.write(oldData.getBytes());
            }
        } catch (IOException e) {
                 e.printStackTrace();
        }finally {
            if(outputStream!=null){
                try{
                    outputStream.close();
                }catch (Exception e){
                   e.printStackTrace();
                }
            }
        }
    }
 
    //Read from file
    public static String readFile(Context context) {
        BufferedReader inputStream = null;
        StringBuffer buffer = new StringBuffer();
        String line;
 
        try {
            file = new File(context.getCacheDir(), mFileName);
            inputStream = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            while ((line = inputStream.readLine()) != null) {
                buffer.append(line);
            }
        } catch (IOException e) {
                e.printStackTrace();
        }finally {
            if(inputStream!=null){
                try{
                    inputStream.close();
                }catch (Exception e){
                      e.printStackTrace();
                }
            }
        }
        return buffer.toString();
    }
 
    public static void deleteFile(Context context){
        file = new File(context.getCacheDir(), mFileName);
        file.delete();
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 12:06
Привет! Вот еще темы с ответами:

Утечка памяти при использовании Handler - Программирование Android
Добрый день, многоуважаемые форумчане :). Прошу помощи в решении проблемы. Приведу несложный исходный код. MainActivity.java ...

HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти - C#
Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка ссылки с сайта и ищет там определенную...

Вектор, утечка памяти, функция создания и выделение памяти - C (СИ)
Здравствуйте. Есть проблема. функция malloc выделяет память лишь в функции CreateVector(), и при выходе из нее указатель теряется. Или не...

Утечка памяти - C++
Господа подскажите как узнать какая п̶а̶д̶л̶а̶ переменная жрет память? Или как посмотреть сколько вообще переменных и объектов находятся в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.06.2016, 12:06
Ответ Создать тему
Опции темы

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