Запрет стандартному Task Killer'у выгружать нужные вам приложения. Все устройства. | Ваши любимые приложения всегда будут оставаться в памяти устройства



Реп: (388)
Запрет стандартному Task Killer'у выгружать нужные вам приложения.
Программа заставит устройство мгновенно реагировать на ваши действия и сделает его экономичнее!
Первая и единственная программа такого типа, которая действительно работает!
Меняется приоритет на -17, или любой другой, и не сбрасывается при выходе из проги.

Программа находится в режиме тестирования и доработки способа удержания апп в памяти.

Последнее обновление программы в шапке: 07.12.2012
AutoOOMmanager
Версия: 0.95
Прикрепленное изображение


Описание и алгоритм
Как и любой обладатель андроида, который хоть немного знает про его работу, знаю, что стандартный тасккиллер убивает приложения при нехватке памяти.
Передо мной встал вопрос, как же заставить андроид запустить и держать в памяти ВСЕГДА приложения, которыми пользуюсь постоянно (например звонилка).
На форуме нашел предложения о повышении приоритета через renice или правкой билд.проп с указанием, что такие то приложения не убивать.
Но эти способы не работают!!!
Поизучав вопрос, нашел программы типа ® AutoKiller которые умеют делать приоритет oom killer -17
Но! Эти программы не умеют держать приоритет и стоит задать в ней, переключиться в само приложение и все, приоритет сброшен.

Отсюда и возникла эта тема. Хотим сделать программу, которая все таки будет работать.
Вроде получилось ;)
Смысл данной программы выполнить 4 команды
pidof - чтобы узнать в какой папочке искать файлик с приоритетом
cat - прочитать, чего в нем сейчас
и если в этом файлике НЕ -17, то
echo - записать -17
Ну и подсказали все это закрепить командой chmod и значениями 444

Команда разработчиков и тестеров:
RubberBigPepper
asuslava
Black_BG

Выражаю огромную благодарность RubberBigPepper за помощь в реализации программы, а также asuslava за простую и гениальную идею с правами!!! Спасибо огромное! :thank_you:

Цель
Нужные приложения всегда в памяти, мгновенно открываются, мгновенный переход между приложениями ну и экономия батареи (тк не нужно подгружать данные и загружать проц/поднимать частоту)

Программа требует права суперпользователя!
Скачать: AutoOOMmanager версия 0.95 (полноценно работающая версия)
Прошлые версии

Полезное дополнение - ® Autostarts

Девиз темы
Нет ничего невозможного!)


Сообщение отредактировал Black_BG - 25.01.13, 21:57
Причина редактирования: появилась стабильная версия



Реп: (388)
задал вопрос по существу :D в темах Скрипты, твики, собери их все и ® AutoKiller



Реп: (213)
Black_BG, я выяснил, что если свернуть-развернуть приложение, то эта настройка сбивается, т.е. AutoKiller просто меняет oom_adj процесса (в теме про твики я чуть подробнее это описал). Наверное, адекватного решения задачи (кроме как ежеминутно или даже чаще выполнять эти команды) нету, потому что Android меняет эти значения при изменении состояния приложения (свёрнуто, передний план, задний план, ...). Как отловить эти события "снаружи" интересующего приложения я не знаю.

Сообщение отредактировал Galamar - 17.10.12, 23:55



Реп: (388)
Ищу программиста, который сможет написать простую программу

подробности в шапке темы.



Реп: (213)
Кажется, на xda есть похожее приложение. Оно находится в стадии разработки. Читать, начиная отсюда.
Там на 6-й странице есть ссылка на форму регистрации для тестирования.
Мне файл так и не пришёл. Может, тебе повезёт?



Реп: (388)
спасибо! видел. аналогичный подход. но если они будут тупо класть в инит.д то работать не будет. но даже с моим кривым английским я понял что также ищут разраба, чтоб прогу делать.
Товарищи, давайте сами запилим прожку. просто же все...

Добавлено 23.10.2012, 08:07:

можно пимп май цпу переделать. она же аналогична, только пишет по другому адресу...



Реп: (1400)
Black_BG,
Можно по-быстренькому написать.



Реп: (388)
можно) все тесты на мне если нужно.

Добавлено 23.10.2012, 08:34:

если поможет, то можно эту прожку разобрать. как мне кажется, что смысл похож, но пишет просто в другой файл. хотя могу ошибаться...
® Pimp My CPU



Реп: (1400)
Версия 0.1 бетта.
Сыровато и много чего из интерфейса не доделано.
При запуске показывает список приложений, всех установленных в системе.
У запущенных приложений OOM Value будет отличным от "--".
Долгий тап на нужном элементе меняет устанавливаемое OOM (в проге так и написано "OOM Set to") между -17 и то что система поставит (в программе "--")
При выходе запускается сервис, который раз в 5 секунд(можно чаще-будет жрать сильнее батарею) проверяет что запущено на экране.
При изменении запущенного приложения он обновляет всем заданным ООМ в -17.
Слушаю критику
Прикрепленный файлAutoOOMmanager.apk ( 30.42 КБ )



Реп: (213)
RubberBigPepper, ты наш спаситель! :happy:
Ушёл тестить.

UPD
У меня при запуске появляется "Reading apps" на 1 секунду, исчезает - и всё. Чёрный экран с названием программы.
В логе никаких ошибок нету.

Сообщение отредактировал Galamar - 24.10.12, 00:28



Реп: (1400)
Galamar @ 24.10.2012, 02:51 *
У меня при запуске появляется "Reading apps" на 1 секунду, исчезает - и всё. Чёрный экран с названием программы.
В логе никаких ошибок нету.

Странно. А в каком логе?



Реп: (1400)
Проверил на SGS3, Sensation XE, Desire S - на всех нормально запускается и показывает список приложений.



Реп: (388)
У меня все запускает на сенсации на СМ9 с андроидом 4.0
RubberBigPepper @ 23.10.2012, 21:41 *
Сыровато и много чего из интерфейса не доделано.

нормальный интерфейс - ничего лишнего)
Есть фигня, что не подхватывает приложение и не делает -17, хотя оно болтается с приоритетом 10-12... возможно из-за быстрых переходов.
RubberBigPepper @ 23.10.2012, 21:41 *
Слушаю критику


не критика. просто о логике приложения хотел поговорить.
Сейчас, как я понимаю, каждые 5 сек сервис проверяет, что за окно открыто. если окно иное чем 5 сек назад, заново переприсваивает -17 нужным приложениям. так?

Рассмотрю 2 ситуации, на обе уже наткнулся.

1) я сижу и читаю книгу 2 часа. ничего не происходит. зачем здесь каждые 5 сек проверять есть ли новое окно?
2) я зашел в приложение и в туже секунду вышел из него. получается сервис проморгал этот момент...

Я предлагаю следующую логику. Раз сервис все равно делает проверку каждые 5 сек на новое окно, то давайте лучше он каждые n секунд/минут будет тупо сувать -17 во все нужне места.

И самое главное!
Такие программы как ® Pimp My CPU и ® SetCPU тоже завязаны на запуск приложения.
Я уверен, что они не мониторят каждые n секунд что на экране. Почему? потому что смену частоты они делают мгновенно. либо они мониторят раз в 0,5 сек (тогда бы умерала батарейка быстро, а это не так) либо ждут какого то события.
Думаю, что они реагируют на какое то событие - "запуск приложения"/"смена приложения"/"поменялось окно" (не знаю как правильно назвать). событие произошло, они отреагировали мгновенно, а не мониторят каждые n секунд.


В идеале, я представляю следующую логику программы


  1. Сделали нужные приложения в проге неубиваемыми.
  2. вышли из проги и запустился сервис
  3. сервис НЕ мониторит каждые n секунд, а ждет события "запуск приложения"/"смена приложения"/"поменялось окно"
  4. Как только событие произошло, он меняет на -17 в нужных местах и ждет след. события.
  5. Также работает таймер который раз в n минут (именно минут, это для ситуации с чтением книги) принудительно запихивает -17 в нужные места, не глядя что там уже есть.



Посмотрите пожалуйста как реализовано ожидание события в ® Pimp My CPU и ® SetCPU
если удастся реализовать именно также, было бы замечательно, тк мне представляется, что это лучшая реализация, тк сбоев ни пимп ни сетцпу не дают даже при быстром переходе по домику (долгое нажатие)

Версия 0,1 бэта добавлена в шапку

Сообщение отредактировал Black_BG - 24.10.12, 08:41



Реп: (1400)
Black_BG @ 24.10.2012, 11:39 *
Сейчас, как я понимаю, каждые 5 сек сервис проверяет, что за окно открыто. если окно иное чем 5 сек назад, заново переприсваивает -17 нужным приложениям. так?

Именно так
Black_BG @ 24.10.2012, 11:39 *
1) я сижу и читаю книгу 2 часа. ничего не происходит. зачем здесь каждые 5 сек проверять есть ли новое окно?
2) я зашел в приложение и в туже секунду вышел из него. получается сервис проморгал этот момент...

вроде как нет способа отследить запуск приложения, вернее мне он не известен.
Black_BG @ 24.10.2012, 11:39 *
Посмотрите пожалуйста как реализовано ожидание события в ® Pimp My CPU и ® SetCPU

Погляжу.



Реп: (566)
Black_BG,
вот не знаю такую возможность, это как???

предполагаю, что за счёт внедрения дополнительных активити в программу, на какое нибудь часто происходящее событие.
Или всё таки использовать возможности утилиты nohup...
Хотя, как я вижу проблема уже почти решена.

RubberBigPepper,
ваше детище работает и на 4 и на 2.3



Реп: (388)
RubberBigPepper, спасибо!

Просто тот же таскер например, конечно работает со скриптами криво, но он как то отслеживает события запуска приложения и меняет мне например яркость мгновенно.
у меня сделано как в нем? чтоб при запуске нард автояркость отключалась и включалась яркость 40% (начальная задача) и как только я выхожу из нард (без разницы как, кнопка выход или домик) автояркость опять включается (конечная задача) и все это присходит прям мгновенно как и в пимпе и сетцпу.
Аналогично у меня сделано и на контакты, только яркость 100%
На оперу у меня сделано, чтоб включался автоповорот, а при выходе выключался.
про профиля на звонок и там на подключение зарядника я не говорю, эти события наверное легко отследить, да и не нужны они нам.

Сообщение отредактировал Black_BG - 24.10.12, 08:57



Реп: (1400)
Поглядел.
Код из pimpа, хорошо сделана программа, но вылетает на моих телефонах сразу.
Обфускатором прошлись-гут.
package fr.mydedibox.pimpmycpu.utility;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.os.Handler;
import fr.mydedibox.pimpmycpu.a.e;
import java.util.List;

final class v
implements Runnable
{
v(UtilityScalingService paramUtilityScalingService)
{
}

public final void run()
{
UtilityScalingService.a(this.a);
boolean bool = UtilityScalingService.b(this.a);
String str = ((ActivityManager.RunningTaskInfo)UtilityScalingService.c(this.a).getRunningTasks(1).get(0)).topActivity.getPackageName();
Object localObject = UtilityScalingService.d(this.a).a(str);
if (!((String)localObject).contentEquals("none"))
{
if (UtilityScalingService.e(this.a).a.contentEquals((CharSequence)localObject))
break label244;
localObject = UtilityScalingService.f(this.a).a((String)localObject);
if (localObject == null)
{
new StringBuilder(String.valueOf(str)).append(": unable to load profile (null)").toString();
UtilityScalingService.d(this.a).b(str);
}
else
{
if (((e)localObject).b.contentEquals(c.d()))
break label185;
new StringBuilder(String.valueOf(str)).append(": unable to load profile (kernel missmatch)").toString();
UtilityScalingService.d(this.a).b(str);
}
}
UtilityScalingService.a(this.a, false);
break label244;
label185: new StringBuilder(String.valueOf(str)).append(" profile found : ").append(((e)localObject).a).append(", applying").toString();
UtilityScalingService.a(this.a, (e)localObject);
((e)localObject).c();
UtilityScalingService.g(this.a);
UtilityScalingService.a(this.a, true);
label244: if ((bool) && (!UtilityScalingService.b(this.a)))
this.a.a(true);
UtilityScalingService.h(this.a).postDelayed(this, 1000L);
}
}

То есть сделано как и у меня, только раз в секунду проверка запущенного приложения

как у меня сделано
private Runnable m_cTaskRunnable=new Runnable()
{
public void run()
{
m_cHandler.removeCallbacks(m_cTaskRunnable);
List<ActivityManager.RunningTaskInfo>cArTasks=m_cAM.getRunningTasks(1);
if(cArTasks!=null&&cArTasks.size()>0)
{
ActivityManager.RunningTaskInfo cCurTask=cArTasks.get(0);
if(cCurTask.id!=m_nLastTaskID)
{//запущено другое приложение
m_nLastTaskID=cCurTask.id;
UpdateAllOOM();
}
else
{//запущено тоже приложение, проверяем по имени
if(cCurTask.topActivity!=null)
{
if(!cCurTask.topActivity.getClassName().equals(m_strLastRunningActivity))
{
m_strLastRunningActivity=cCurTask.topActivity.getClassName();
UpdateAllOOM();
}
}
}
}
m_cHandler.postDelayed(m_cTaskRunnable, 5000);//один раз в 5 секунд проверка
}
};


Сообщение отредактировал RubberBigPepper - 24.10.12, 09:02



Реп: (388)
wernow @ 24.10.2012, 09:52 *
проблема уже почти решена


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



RubberBigPepper,

Я забыл...
нужно сделать задержку на запись -17, ну например 0,5-1 сек, чтобы не произошла ситуация что программа сменила приоритет раньше киллера, а киллер потом сбросил...
с таскером мне кажется так получалось, но однозначно спалить это у меня просто тупо нет возможности, но зато есть стойкое ощущение этого

Добавлено 24.10.2012, 09:04:

RubberBigPepper @ 24.10.2012, 10:00 *
То есть сделано как и у меня

а почему же пимп вообще не ест батарейку?
а сетцпу чего говорит?



Реп: (566)
RubberBigPepper,
а реализация запуск скрипта скриптом в фоновом режиме с заданными переменными в данном случае применимо?



Реп: (1400)
wernow @ 24.10.2012, 12:04 *
а реализация запуск скрипта скриптом в фоновом режиме с заданными переменными в данном случае применимо?

мой моск сломан таким вопросом
Black_BG @ 24.10.2012, 12:04 *
а почему же пимп вообще не ест батарейку?

возможно еще потому, что он не работает при выключении экрана? Вернее перестает отслеживать запускаемые приложения.
Black_BG @ 24.10.2012, 12:04 *
Я забыл...
нужно сделать задержку на запись -17, ну например 0,5-1 сек, чтобы не произошла ситуация что программа сменила приоритет раньше киллера, а киллер потом сбросил...

Это можно. Но я думаю все-таки сделать так: раз в секунду проверка что запущена и раз в 30секунд-минуту принудительная смена ООМ.



Реп: (213)
RubberBigPepper, в системном логе (logcat)


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 23.04.26, 17:00