420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
1 | |
Отложенное одноразовое действие по цилкическому таймеру11.04.2015, 13:57. Показов 919. Ответов 4
Метки нет (Все метки)
Возникла такая мысль для оптимизации:
есть флай-панелька (над всеми активити). Ее можно двигать пальцем. Надо запоминать ее позицию. Сделал свой реактор OnMove. В нем пишу в базу позицию. При частом движении получаю сотню записей/sql запросов (процессор взлетает до 100%), хотя хватило бы раз-два в секунду. Хочу создавать некий класс-таймер который сработает через секунду. Причем "заказывать" событие можно много раз (подправляя данные для записи или даже без этого - сам получит), но сработает лишь раз. После срабатывания таймер можно "перезапустить". Надо управлять частотой срабатывания. На моей памяти мне часто нужно было подобное, но не знал как. Прежде чем городить велосипед, хотелось бы узнать - может такое УЖЕ есть? Как хотя-бы называется такая технология?
0
|
11.04.2015, 13:57 | |
Ответы с готовыми решениями:
4
Одноразовое действие в постоянном цикле Действие по таймеру Выполнить действие по таймеру Действие по таймеру - как лучше? |
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
11.04.2015, 15:48 [ТС] | 3 |
Это в принципе и не важно! Панелька - моя, реактор тоже я сам написал...
Панелька - "отделеный" вьюв над всеми активити (даже когда все свернуто - полезно для индикаторов, например во время разговора по телефону). Писал сам с нуля. Обрабатываю движение пальцем для таскания панельки по экрану. Написал свой интейфейс-реактор с внейшней функцией OnMove. Она вызывается когда замечено движение хоть на пиксел. Реактора "на отпускание" нет (да и не нужно). И... надо записывать раз в секунду где в текущий момент. Возможно там-же выводить на экран строку с координатами. Фишка в чем: пикселов ОЧЕНЬ много (разрешение экрана хорошее и в миллиметре может быть большая "погрешность")! Палец тоже может "дрожать" (глаз не замечает, а на самом деле прыгает между 100 и 110) в результате получаем кучу "необходимостей записать" новое состояние. Но нам такая точность не нужна! Нужно что-то вроде 1) создаю глобальную переменную с классом, отвечающим за запись. В нее передаю через интерфейсы функцию записи координат. 2) посылаю в него команду - "есть изменения - запишись". 3) таймер откладывается на секунду 4) посылаю еще 100 команд. но если таймер еще не сработал - они игнорируются 5) срабатывает таймер. Вызывается внешняя обработка для записи (с текущими координатами). таймер ОСТАНАВЛИВАЕТСЯ. 6) если приходит еще одна команда "есть изменения - запишись", таймер перезапускается еще на секунду. В результате жуткая экономия процессора! У меня панелька аж "заикается" когда тащу - начинает "прыгать" по экрану, а не ползти плавно. Может такое УЖЕ есть? Как такое написать с нуля ЗНАЮ, займет миниму часа 3-4 с отладками и тестами, но обидно будет узнать что изобрел велосипед. Вдруг есть плохо документированная ВСТРОЕННАЯ возможность для подобного?
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
11.04.2015, 18:27 [ТС] | 5 |
Не хочешь помогать - не засоряй ветку!
реактор Я писать должен! В "предке"! Я туда вписал только то чем реально пользуюсь. ВНЕШНИЙ реактор на отпускание мышки тоже могу приписать(создавать интерфейс, обрабатывать, назначать), но даже в этом случае мне он не нужен! Мне нужно выполнять НЕ ЧАСТО обработку при самом движении, а не при отпускании!!! И мне нужна ТЕХНОЛОГИЯ, а не частное решение! Это лишь последний раз, когда я "споткнулся" на том что этого нет, а хотелось бы... Помню десяток случаев, когда идет килобайты почти одинакового мусора в логи, когда хотелось бы задавать "назойливость". Когда писал игрушку с бесконечным циклом и при каждом такте получал координаты машинки - не успевал поток текста читать - за секунду до 30-100 строк добавляло...
0
|
11.04.2015, 18:27 | |
11.04.2015, 18:27 | |
Помогаю со студенческими работами здесь
5
Действие по таймеру выполняется в отдельном или общем потоке Одноразовое переключение сигнала Одноразовое подключение mysqli Одноразовое выполнение булевской переменной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |