Напоролся на непонятную вещь. Заглянул в Android Monitor посмотреть потребление памяти, по непонятной причине память ровно и медленно текла с 9 М до 15 М, следовала очистка мусорщиком и по новой. В приложении в этот момент ничего не происходило. Кусок за куском комментировал код в поисках утечки. И дошёл до предела - чистая активити и манифест. Память по прежнему текла.
Создал в студии по шаблону чистое приложение с applicationId выбранным наобум. Запускаю, память стоит как вкопанная. Перетащил всё из примера в свой проект, память по прежнему течёт с тем же характером.
Дальше пошёл крышеснос. В этом свежеиспечённом девственном тестовом проекте (!) в defaultConfig заменяю applicationId на id из рабочего проекта. Твою дивизию, память потекла! Причём один в один.
Заменяю applicationId обратно - память стоит. И так несколько раз.
Рабочий проект был вчера залит альфой на плей. Подумалось, что возможно гугл как-то что-то присоединяет на устройстве к моему процессу для проектов из плея для оценки поведения (ну а что ещё тут думать можно?) . Стал пробовать менять на другие id своих опубликованных проектов и смотреть потребление. Память стоит. Скачет только при одном конкретном имени пакета.
// applicationId "com.*****.swf"// 10.79
// applicationId "com.*****.*****off"// 8.47-15
// applicationId "com.*****.*****lock.free"// 9.04 | 11.12 | 9.65
// applicationId "com.*****.*****lockplus"// 10.41 | 11.30
applicationId "com.*****.*****_off"// 11.43 | 9.99-7.83
Что интересно, например, приложение с именем пакета с swf стабильно потребляло 10,79. Проверял на перезапусках. Потребление с другими именами пакетов тоже видно. И то самое невезучее имя "com.*****.*****off", с которго всё началось.
Методом тыка остановился на имени пакета "com.*****.*****_off". Оно либо стабильно стоит на 11.4 Мб, либо падает до 7.8 Мб и остаётся на нём. Достаточно было только добавить символ _.
Всё это на 6-м Андроиде (LG) и самой новой стабильной студией 2.2.3. Приложение из шаблона студии - "Basic Activity".
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.*****.*****_off"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:design:25.1.0'
testCompile 'junit:junit:4.12'
}
Картинки потребления памяти
одного и того же пустого приложения.
со "скачущим" именем пакета: "com.*****.*****off"
с именем пакета: "com.*****.swf"
UPD. В одном эксперименте у скачещего инстанса заменил имя вживую (с "com.*****.*****off" на "com.*****.swf"), без перезапуска, как это умеет студия, и постепенно очистка за очисткой мусорщиком память упала до 8,5 Мб и успокоилась. Это видно на картинке ниже.