Axian Ltd, а какую литературу вы бы порекомендовали?
Да, на всякий случай, я имею ввиду чисто программную собственную реализацию ПИД, а не готовое покупное устройство.
Пока от прочитанной теории (с примерами реализации тут и тут реализации правда несколько отличаются) складывается впечатление что ПИД подобен механической ручке регулирования и что для каждого значения скажем необходимой скорости вращения требуется его перенастройка, так ли это?
Если взять конкретный пример, скажем 60об/мин, то мне кажется что +/- 1-5% к этой скорости погоды не сделают, а вот +33% это наверняка приведет к разбалансировке и необходимости перенастройки ПИД?
Может не совсем понятно выразился, я имею ввиду, что предположим имеется некая программная реализация ПИД и возмем два случая:
1) произведена его настройка для скорости 60об/мин для холостого (условно, нагрузка конечно же есть, но меньше, ну скажем минимальная, но постоянная, которая не увеличивается и не уменьшается) хода
2) нагружаем систему, соответственно возрастает ее инерционность, как следствие необходимо повышать мощность на двигатель и ПИД в данном случае будет пытаться это делать, чтобы достичь той же скорости
в общем проблема похоже понятна, файл содержит мусор, который появился в результате неявных преобразований кодировки...
вот код (корявый конечно) :)
String load_url(String url){
try {
URL u = new URL(url);
URLConnection conn = u.openConnection();
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
ну хз, должно же быть какое-то логическое объяснение?!
может нужны какие-то дополнительные права в манифесте?
хотя файл же записался...
путь был сформировал с помощью вызова getCacheDir
private static void setUpAlarm(final Context context, final Intent intent, final int timeInterval)
{
final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final PendingIntent pi = PendingIntent.getBroadcast(context, timeInterval, intent, 0);
am.cancel(pi);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pi);
am.setAlarmClock(alarmClockInfo, pi);
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi);
else
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi);
}
3(!) ТРИ различные способа установки алармманагера в зависимости от версии АПИ, в страшном кошмаре такое не приснится! кофейная гуща нервно курит в сторонке и отдыхает :)
cherepizza: под push вы имеете ввиду GPM (Google Push Messages) ? судя по статье https://habrahabr.ru/post/274169/ это та еще хрень, которая работает через пень колоду Денис Загаевский: да читать можно до посинения, но факт есть факт, вполне возможно, что такое поведение далеко не на всех устройствах и/или версиях андроида, но конкретно на моем устройстве это именно так.
В методах и конструкторе сервиса сделан вывод отладочной инфы в логи. И судя по логам после отработки сервиса он реально завершается (т.е. вызывается onDestroy и он пропадает из списка задач), но буквально через считанные секунды снова появляется, при этом в логах об нет никакой информации, как будто ни конструктор ни какой-либо другой метод не вызывается.
Денис Загаевский: сделал через WakefulBroadcastReceiver и получается забавная вещь, в методе onHandleIntent в конце используется SimpleWakefulReceiver.completeWakefulIntent(intent) (где-то в примере было) и после его вызова на несколько секунд исчезает процесс, но потом снова появляется (при этом в алармманагере интервал запуска стоит 5минут). Т.е. получается система по какой-то непонятной причине все равно перезапускает сервис независимо от алармманагера?!
Денис Загаевский: Нашел вот такой пример алармманагера https://github.com/commonsguy/cw-omnibus/tree/mast..., в принципе по смыслу подходит, но и тут все равно используется сервис IntentService, у которого срабатывает метод onHandleIntent с указанной периодичность. И опять же после убивания процесса сервис автоматически запускается.
Денис Загаевский: хм, дело в том, что приложение должно авто запускаться после загрузки и отслеживать "новости" без явного запуска приложения и умные люди посоветовали сервис Как в андроиде реализован механизм? А AlarmManager не обладает такой способностью?!
Не хотелось захламлять вопрос ненужными подробностями.
Но вкратце работа сервиса должна зависеть от того запущена активити или нет, если запущена, то сервис ничего не делает, а если не запущена, то делает полезную работу :) а конкретно с определенным интервалом опрашивает сервер и при необходимости формирует извещения.
Можно и посредник, только непонятно как это вообще будет/должно работать?! Собственно и так не понятно кто/где и в какой момент инстанцирует экземпляр сервиса и активити, а при появлении посредника вообще все становится еще непонятнее. Кто должен инстанцировать посредника? Пока единственным вариантом мне кажется это сохранение состояния активити в SharedPreference наверное топорно, но тут хоть понятны механизмы взаимодействия.
Ну вот еще к примеру приложение "гугл+" или "госуслуги" их никто не запускает, по крайней мере после перезагрузки, но они заразы такие постоянно висят с таскманагере и даже если их прибить, то все равно они снова появляются. Это сервисы?
GavriKos: все верно, приложение должно работать как бы в фоне, с некой периодичностью будет опрашивать сервер и в случае появления "новостей" выводить извещение об этом. Это нужно для проекта https://github.com/KRAndroidDevelopment/LizaAlert
Да, на всякий случай, я имею ввиду чисто программную собственную реализацию ПИД, а не готовое покупное устройство.
Пока от прочитанной теории (с примерами реализации тут и тут реализации правда несколько отличаются) складывается впечатление что ПИД подобен механической ручке регулирования и что для каждого значения скажем необходимой скорости вращения требуется его перенастройка, так ли это?
Если взять конкретный пример, скажем 60об/мин, то мне кажется что +/- 1-5% к этой скорости погоды не сделают, а вот +33% это наверняка приведет к разбалансировке и необходимости перенастройки ПИД?
Может не совсем понятно выразился, я имею ввиду, что предположим имеется некая программная реализация ПИД и возмем два случая:
1) произведена его настройка для скорости 60об/мин для холостого (условно, нагрузка конечно же есть, но меньше, ну скажем минимальная, но постоянная, которая не увеличивается и не уменьшается) хода
2) нагружаем систему, соответственно возрастает ее инерционность, как следствие необходимо повышать мощность на двигатель и ПИД в данном случае будет пытаться это делать, чтобы достичь той же скорости