Хотите поблагодарить автора блога - жмите здесь !
1 2 0
1 2 0

Нажмите на рекламный баннер выше, если хотите поблагодарить автора блога !
Написание каждой статьи заняло в сотни раз больше времени, чем один клик.

вторник, июля 02, 2013

Android.process.media решение проблемы торможения при загрузке и быстрой разрядки аккумулятора

Решение проблемы торможения Android.process.media при загрузке.

Повторяться полностью, и повторно описывать этот "глюк", имеющийся в наличии как у Android 4.0X  (Ice Cream Sandwich), так и как минимум у Android 4.1/4.2 (Jelly Bean) я не буду, так как подробно описал в предидущем посте вот тут: http://vyacheslav.blogspot.com/2013/06/android-androidprocessmedia.html. Кому интересны детали, прочтите сначала его. К сожалению остановкой сервиса "Хранилище multimedia" проблему решить не удалось. Точнее удалось, но на него завязаны мелодии звонков какого то рожна, поэтому...

ДОПОЛНЕНИЕ ПОЗЖЕ - можно воспользоваться программой https://play.google.com/store/apps/details?id=com.addz.mediascannerroot&hl=ru - это решит вопрос кардинально, отключив "автосканирование", но в отличие от нижеизложенного способа, автосканирование будет отключено для всех папок и после добавления например нового рингтона на карточку, чтобы "андроид" его "увидел" придется запускать сканирование вручную через эту же программу. Но экономия батареи тут точно будет выше :)

Поэтому другой путь решения. На этот раз "без побочных эффектов".

Время торможения" и "выжирания аккума" после старта, при использовании этого решения ограничиваются ~1,5 минуты +- , плюс сильно снижается и вероятность его  (android.process.media) "выхода на тормоза" во время нормальной работы.
Того же самого, что описано ниже, можно добиться и без ручного редактирования системных областей. Для этого нужно поставить аналог "linux cron" для Android из маркета (ищите в маркете на слово cron), и прописать, чтобы пр изапуске и периодически запускались комманды, скопированные из скрипта ниже. Я от этого варианта отказался, так как все проверенные "крон подобные" программы "кушают" метров 10 оперативки постоянно,а вариант ниже "не кушает" ее вообще.
Следует отметить,  что этот способ подойдет не всем, не потому что он может у кого-то не работать, а потому что он "сильно сисадмовский" и требует внесения изменений вручную в системные области. Теоретически можно сделать простую программку, которая будет нормально инсталлироваться, и выполнять ту же функцию, и при этом будет "юзер френдли". Но я на данный момент не програмлю в Андроиде, поэтому воспользовался "привычными мне инструментами". Если Вы программите - можете легко создать такую прогу, и поместить ее в маркет - на радость обычным пользователям.
Идея состоит в создании скрипта, который запускается при старте системы, потом ожидает пока подключится карточка, после чего вытирает в нужных каталогах файл ".nomedia" и создает его снова. Зачем это делать и что это дает смотрите здесь :http://vyacheslav.blogspot.com/2013/06/android-androidprocessmedia.html

А теперь перейдем к делу.

В описании, я исхожу из того, что Ваш аппарат уже рутован, и в каталоге /system/etc у Вас уже создан подкаталог init.d, и у Ваше ядро поддерживает init.d инициализацию. Я не знаю поддерживает ли "стоковое", у меня стоит ThunderZap kernel. Как его ставить на Fly IQ 450 опишу позже. Если Ваше ядро не поддерживает init.d ничего страшного не случится - просто работать не будет эта "заплатка" :-\

Из инструментов, мы будем использовать в основном Root explorer (скачать его можете здесь : http://4pda.ru/forum/index.php?showtopic=134840 - требуется регистрация, или здесь: https://play.google.com/store/apps/details?id=com.speedsoftware.rootexplorer&hl=ru. А также консоль, чтобы проверять что все правильно сделали, скачать которую можно здесь: https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=ru, или здесь: http://4pda.ru/forum/index.php?showtopic=164972.

С инструментами разобрались.
Теперь, если у Вас всеже нет каталога init.d, а рут уже есть, то запускаете Root Explorer, идете в каталог /system/etc, и в нем создаете каталог init.d. Перед тем как делать каталог, нажмите вверху справа кнопочку R/W чтобы была позволена запись. ОСТОРОЖНО - если там что нить вытрете - последствия могут быть феерические :)

Теперь идем в каталог /data, и там создаем каталог "StopScan".

Заходим в него, Нажимаем "меню" и выбираем "новый файл". Вводим его имя "StopScan". Потом долгим !! нажатием вызываем меню на этом файле (если у Вас появилась менюшка с иконками - значит Вы нажали коротко - отмените - повторите - должна появиться чисто текстовая). В этом меню выбираем "Открыть в текстовом редакторе".

Тепер в текстовом редакторе набираем следующий текст скрипта:
===Cut here
#!/system/bin/sh
sleep 100
rm "/mnt/sdcard/clockworkmod/.nomedia"
rm "/mnt/sdcard/CSipSimple/.nomedia"
rm "/mnt/sdcard/Download/.nomedia"
rm "/mnt/sdcard/Karaoke/.nomedia"
rm "/mnt/sdcard/backups/.nomedia"
rm "/mnt/sdcard/Books/.nomedia"
sleep 1
touch "/mnt/sdcard/clockworkmod/.nomedia"
touch "/mnt/sdcard/CSipSimple/.nomedia"
touch "/mnt/sdcard/Download/.nomedia"
touch "/mnt/sdcard/Karaoke/.nomedia"
touch "/mnt/sdcard/backups/.nomedia"
touch "/mnt/sdcard/Books/.nomedia"
====Cut here
Первое sleep 100 - задержка в секундах, от момента запуска скрипта до момента когда будет подключена карточка. Чем она больше - тем дольше будут длиться "тормоза после загрузки" вызванные глюком Android.process.media (Хранилища мультимедиа) (они пропадают ~ за минуту после срабатывания скрипта). Но если скрипт сработает до того как карточка будет подключена - он не сработает :) В смысле толку не будет.

Далее, идет перечень каталогов, в которых нужно убрать ".nomedia", предваренных коммандой "rm". Обязательно оставьте rm "/mnt/sdcard/clockworkmod/.nomedia", если у Вас на карте хранятся бэкапы CWM recovery. Чаще всего "Хранилище мультимедиа" "застряет надолго" именно там. Остальные по вкусу. Только уберите строки с каталогами, которых у Вас физически нет.
Далее даем системе секунду "одуматься", и в тех же каталогах снова прописываем ".nomedia". Выбирайте те каталоги, в которых у Вас ледит большое количество файлов, и куда Вы не хотите чтобы лазило "Хранилище". Чем больше файлов в каталоге - тем больше оно там будет ковыряться. А если еще и битые файлы картинок попадутся то "мало не покажется".
Записываем файл, после чего сново "долгим нажатием" вызываем меню, и выбираем пункт "разрешения". В открывшемся окошке, во втором вертикальном ряду убираем две нижние галки, а в третьем вертикальном - ставим все галки.  OK. Все, тут готово.

Да, теоретически, Вы можете сформировать этот файл на ПК, и залить в нужное место через ADB, и им же сменить пермишены. Только не забывайте что файл в Выни и Юнихах имеют разный формат конца строки. Если не знаете как с этим бороться, то лучше наберите в редакторе, как я описал выше. Иначе ничего работать не будет.

Теперь идем в каталог /system/etc/init.d,
там аналогичным описанному выше способом, создаем файл "06userini". В него вписываем:
===Cut here
#!/system/bin/sh
/data/StopScan/StopScan &
===Cut here

Эта команда запускает созданный нами предидущий скрипт, и не ожидая его окончания (если помните он с задержками), возвращает управление системе, чтобы она спокойно грузилась дальше.
Записываем, выходим, и способом, описанным выше меняем "разрешения" и для этого файла.
ВЫТИРАЕМ  образовавшийся файлик с расширением ".bak" !

Собственно это и все, но стоит проверить. Если Вы абсолютно уверены в себе, то можете не проверять - все должно работать. Но я напр не заметил одну случайно набранную лишнюю букву в имени каталога :)
Проверка.
Создаете файлики ".nomedia" вов сех каталогах, которые не должны сканироваться. Ждете пару минут, потом запускаете консоль (эмулятор терминала), в нем переходите в каталог /data/StopScan (cd /data/StopScan).
Запускаем написанный нами скрипт: ./StopScan. 
Ждем пока отработает. При его работе не должно появляться на консоли сообщений об ошибках. Наиболее вероятные ошибки - где то неправильно прописали директории - если выскочили ошибки - справьте скрипт в заивсимости от того какие ошибки повыскакивали.
Потом можете любым эксплорером проверить файлики ".nodata" в каталогах, которые Вы не хотите сканировать. Они там должны быть, и их время создания должно быдть ~ на 100 секунд позже момента запуска скрипта. Если не так - ищете в чем отклонились от инструкции, и где с ошибками вписали комманды или имена каталогов в скрипт. Проверяете полсе правки. Все ОК ?
Теперь переходим в каталог /system/etc/init.d (cd /system/etc/init.d)/)
Запускаем ./06userini. Оно выходит сразу. Важно чтобы а - не выдал ошибок. И б - проверьте, что файлики .nomedia в выбранных Вам каталогах обновились ~через 100 сек после запуска. 
Все ок ?

Значит ГОТОВО. Можете перезагружать машинку. После перезагрузки, на вс случай убедитесь, что файлики ".nomedia" обновились. 


Комментариев нет:

Отправить комментарий

Закрыть окно X
Пожалуйста, потратьте несколько секунд на поддержку блога и его автора
Нажмите на рекламную ссылку: Рекламная ссылка для поддержки блога, или на баннер вверху справа страницы.