Сделал свои System.Sensors и System.Android.Sensors. Если кому понадобится то вот ссылка http://www.danielespinetti.it/2016/01/using-locationsensor-on-android-service.html?utm_content=buffer687aa&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer Всё подробно описано. Теперь вопрос почему во сне locationChange не срабатывает.
» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl
zealotfan
Во время сна Андроид останавливает все. Запретить ему усыплять ваше приложение можно wakelock-ом, но пользователи вас убьют, когда увидят как таит их батарейка. Лучше настроить периодическое срабатывание alarm-ма, они тоже могут ненадолго разбудить систему.
Во время сна Андроид останавливает все. Запретить ему усыплять ваше приложение можно wakelock-ом, но пользователи вас убьют, когда увидят как таит их батарейка. Лучше настроить периодическое срабатывание alarm-ма, они тоже могут ненадолго разбудить систему.
Frodo_Torbins
Понял! Пусть юзеры сами будят телефон Еще вопрос. Как сделать так чтобы при уходе в сон или переключении приложения на android моё приложение закрывалось. Сервис при это в любом случае будет работать
Понял! Пусть юзеры сами будят телефон Еще вопрос. Как сделать так чтобы при уходе в сон или переключении приложения на android моё приложение закрывалось. Сервис при это в любом случае будет работать
Андроидовский alarm никак не связан с действиями юзера, это системный объект, которым управляет приложение. Но если вас устроит ситуация, когда сервис будет останавливаться на длительные промежутки времени, то лучше так и оставить.
При переключении на другую апликацию Андроид может оставить вашу некоторое время работать, если ему сейчас не нужны ресурсы. Это делается чтобы ускорить старт приложения, если юзер захочет снова к нему вернутся. Вы можете отловить событие переключения на другую апликуху, и подчистить некоторые внутренние объекты, но полностью лучше не завершать работу. Чем более стандартным будет поведение вашего приложения, тем лучше.
При переключении на другую апликацию Андроид может оставить вашу некоторое время работать, если ему сейчас не нужны ресурсы. Это делается чтобы ускорить старт приложения, если юзер захочет снова к нему вернутся. Вы можете отловить событие переключения на другую апликуху, и подчистить некоторые внутренние объекты, но полностью лучше не завершать работу. Чем более стандартным будет поведение вашего приложения, тем лучше.
Frodo_Torbins
Спасибо за советы. Будем испытывать в полевых условиях работу приложения и сервиса
Спасибо за советы. Будем испытывать в полевых условиях работу приложения и сервиса
Столкнулся с проблемой. Написал программу - клиент datasnap для android 4.2. У всех пользователей всё работало, но сегодня мне принесли планшет с android 5.0. Компилируется проект отлично,но при запуске выскакивает ошибка Aborted (6). Может кто сталкивался с данной проблемой?
zealotfan
В пятом Андроиде в очередной раз подтянули безопасность. В нем нельзя делать некоторые вещи, которые можно было делать в предыдущих версиях. Еще одно большое изменение - переход на ART.
Ну и обычные приколы с железом не забываем. Особенно нужно быть осторожным с Интеловскими Атомами, и любым китаем.
В пятом Андроиде в очередной раз подтянули безопасность. В нем нельзя делать некоторые вещи, которые можно было делать в предыдущих версиях. Еще одно большое изменение - переход на ART.
Ну и обычные приколы с железом не забываем. Особенно нужно быть осторожным с Интеловскими Атомами, и любым китаем.
Вопрос про работу со строками.
Как везде написано, сабжевый компилятор, если надо куда-то передать строку, не копирует ее физически, а передает только ссылку и обновляет некий счетчик обращений.
Допустим, у нас есть процедура, описанная как
Код: procedure Proc(const S: string);
Как везде написано, сабжевый компилятор, если надо куда-то передать строку, не копирует ее физически, а передает только ссылку и обновляет некий счетчик обращений.
Допустим, у нас есть процедура, описанная как
Код: procedure Proc(const S: string);
Ludens
Ссылка без права изменить: const S: string
Ссылка c правом изменить: var S: string
Копирование строки с правом редактирования копии: S: string
Ссылка без права изменить: const S: string
Ссылка c правом изменить: var S: string
Копирование строки с правом редактирования копии: S: string
Ludens
Цитата:
Сам код будет разным, но работать одинаково. В первом случае компилятор знает (модификатор const), что строка не будет изменена внутри процедуры, и поэтому не создаст внутренний блок try..except в котором будет выполняться тело процедуры, и не инкрементирует счётчик ссылок на строку при входе в процедуру, и не декрементирует его после выхода из процедуры.
Если эта процедура часто вызывается в коде, то разница в скорости будет более чем заметна.
Цитата:
В этом случае код будет таким:
1. Инкремент кол-ва ссылок на S;
2. Создание блока try..except и выполнение в нём тела Proc;
3. Декремент кол-ва ссылок на S;
abyss79
Как я понимаю, человек совсем другое спросил...
Цитата:
Да или нет?
Сам код будет разным, но работать одинаково. В первом случае компилятор знает (модификатор const), что строка не будет изменена внутри процедуры, и поэтому не создаст внутренний блок try..except в котором будет выполняться тело процедуры, и не инкрементирует счётчик ссылок на строку при входе в процедуру, и не декрементирует его после выхода из процедуры.
Если эта процедура часто вызывается в коде, то разница в скорости будет более чем заметна.
Цитата:
procedure Proc(S: string);
В этом случае код будет таким:
1. Инкремент кол-ва ссылок на S;
2. Создание блока try..except и выполнение в нём тела Proc;
3. Декремент кол-ва ссылок на S;
abyss79
Как я понимаю, человек совсем другое спросил...
Enzaim
За кодогенерацию не знаю и если создаётся try except, то это печально.
Но главное отличие const и его отсутствие в том, что без const создаётся новая переменная, куда копируется значение старой.
Это позволяет менять её локально без изменения старой, но бьёт по производительности.
Т.е. разница в работе кода более чем заметна и лучше прописывать const, когда это возможно.
За кодогенерацию не знаю и если создаётся try except, то это печально.
Но главное отличие const и его отсутствие в том, что без const создаётся новая переменная, куда копируется значение старой.
Это позволяет менять её локально без изменения старой, но бьёт по производительности.
Т.е. разница в работе кода более чем заметна и лучше прописывать const, когда это возможно.
abyss79
Цитата:
Ет токмо на структурных типах так.
Цитата:
без const создаётся новая переменная, куда копируется значение старой.
Ет токмо на структурных типах так.
Enzaim
procedure Proc(s: string);
begin
// на входе у нас s = 'string'
if s = 'string' then
// тут мы меняем значение
s := 'changed';
end;
s := 'string';
Proc(s);
В Proc же мы поменяли s, но тут s всё ещё равно 'string'.
Почему, если переменная не копируется в новую?
Добавлено:
Сам порылся ради интереса и нашёл что в целях оптимизации, копирование значения без const делается не автоматом, а в момент изменения. В целом логично и правильно.
Но производительности это не помогает, т.к. try finally + thread safe счетчик сильно снижает скорость.
У чувака аж до 66 раз разница в скорости на самопальных тестах:
http://stackoverflow.com/questions/5844904/is-the-use-of-const-dogmatic-or-rational/5845835#5845835
Т.е. в целом принципиально ничего не меняется, и копия создаётся, хоть и при необходимости, и скорость падает в любом случае.
procedure Proc(s: string);
begin
// на входе у нас s = 'string'
if s = 'string' then
// тут мы меняем значение
s := 'changed';
end;
s := 'string';
Proc(s);
В Proc же мы поменяли s, но тут s всё ещё равно 'string'.
Почему, если переменная не копируется в новую?
Добавлено:
Сам порылся ради интереса и нашёл что в целях оптимизации, копирование значения без const делается не автоматом, а в момент изменения. В целом логично и правильно.
Но производительности это не помогает, т.к. try finally + thread safe счетчик сильно снижает скорость.
У чувака аж до 66 раз разница в скорости на самопальных тестах:
http://stackoverflow.com/questions/5844904/is-the-use-of-const-dogmatic-or-rational/5845835#5845835
Т.е. в целом принципиально ничего не меняется, и копия создаётся, хоть и при необходимости, и скорость падает в любом случае.
abyss79
Цитата:
Огромное спасибо за ссылку! Фактически, там задан ровно мой вопрос и дан на него исчерпывающий ответ.
Цитата:
Сам порылся ради интереса и нашёл
Огромное спасибо за ссылку! Фактически, там задан ровно мой вопрос и дан на него исчерпывающий ответ.
А, вообще-то, из каких соображений в паскале был принят именно такой тип строки? Что б быстрее вычислять её (строки) длину?
Добавлено:
Кстати, да, именно "вычислять". В Сях она "вычисляется", а в паскале "получается" после запоминания.
Добавлено:
Кстати, да, именно "вычислять". В Сях она "вычисляется", а в паскале "получается" после запоминания.
abyss79
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи. Разве ему трудно проверить, изменяется ли значение строкового параметра внутри процедуры, и учесть это при создании кода?
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи. Разве ему трудно проверить, изменяется ли значение строкового параметра внутри процедуры, и учесть это при создании кода?
Цитата:
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи.Предложите алгоритм.
Добавлено:
Хотя, нет. Проблемы возникли после того как выяснилось, что строки могут быть не тольео ansi, а ещё и unicode.
Ludens
Точно не знаю, но наверняка есть причины, типа передачи переменных в другие функции, неявные использования и прочее что мешает точно вычислять.
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.
Точно не знаю, но наверняка есть причины, типа передачи переменных в другие функции, неявные использования и прочее что мешает точно вычислять.
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.
abyss79
Цитата:
на той же платформе .NET строки вообще не изменяемые и голову себе не забивают как эти строки передаются в качестве параметров
Цитата:
сделав по умолчанию поведение как при const
на той же платформе .NET строки вообще не изменяемые и голову себе не забивают как эти строки передаются в качестве параметров
Цитата:
А, вообще-то, из каких соображений в паскале был принят именно такой тип строки? Что б быстрее вычислять её (строки) длину?
И это тоже, но главная причина - это защита от ошибок типа Переполнение буфера и Выход за границу буфера.
А счетчик ссылок - это чистая экономия памяти и времени на ее копирование. Хотя с приходом многоядерных процессоров работа со счетчиком перестала быть "бесплатной" как раньше.
abyss79
Цитата:
Лайк
Цитата:
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.
Лайк
Цитата:
Цитата:
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.
Лайк
Эти из серии как VB6 обновили - старый код на свалку, все на .NET!
Цитата:
Эти из серии как VB6 обновили - старый код на свалку, все на .NET!
Понятно что уже поздно и поломает всё, но это вполне себе решение.
Ludens
>Вопрос про работу со строками.
Хотя уже разобрались, но, думаю, не помешают ссылки на пару статей:
https://rsdn.ru/article/Delphi/dynarrays.xml
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206
>Вопрос про работу со строками.
Хотя уже разобрались, но, думаю, не помешают ссылки на пару статей:
https://rsdn.ru/article/Delphi/dynarrays.xml
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206
Цитата:
Понятно что уже поздно и поломает всё
А когда было бы не поздно? До вторых Делфей строковый тип был только один, паскалевский (ShortString). Если что-то и решать, то на уровне директив компилятора.
Цитата:
Если что-то и решать, то на уровне директив компилятора.
Будут проблемы со сторонними компонентами и библиотеками. Поезд ушел безвозвратно или получим Python 3, миграция на который годы идёт из-за подобных ломающих изменений.
All
D10.1 Distiller
Продолжение линейки XE Distiller для Delphi 10.1 Berlin
Исходники (Build 29),
исполняемый модуль (Build 29)
В меню Tools\Extras:
Добавлена опция "Don't create .stat files"
Также по прежнему можно убрать создание следующих файлов:
.local
.~bpl
.identcache
D10.1 Distiller
Продолжение линейки XE Distiller для Delphi 10.1 Berlin
Исходники (Build 29),
исполняемый модуль (Build 29)
В меню Tools\Extras:
Добавлена опция "Don't create .stat files"
Также по прежнему можно убрать создание следующих файлов:
.local
.~bpl
.identcache
В DateTimePicker обрезается день даты. При изменении ширины DateTimePicker дата остаётся на месте т.к. выравнивание по левому краю и день как был обрезан так и есть. Как изменить выравнивание даты в DateTimePicker?
VadimShvarts
Цитата:
низкий поклон, великое дело продолжаешь!
Цитата:
Продолжение линейки XE Distiller для Delphi 10.1 Berlin
низкий поклон, великое дело продолжаешь!
VadimShvarts
Цитата:
Цитата:
Продолжение линейки XE Distiller для Delphi 10.1 BerlinСпасибо, а отключение history можно сделать?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
Предыдущая тема: Отмена встречи в Outlook из Excel VBA
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.