Перейти к содержанию
Fire Monkey от А до Я
  • 0

Проблема в Android 6.0


Сергей Сергеев

Вопрос

Добрый всем день!

Купил по акции в Билайн смартфон с Android 6.0 Senseit A 109. 

Какой пример из Sample ни запущу на нем, в том числе и свое приложение, после перехода на другое приложение ( к примеру в браузер ) , после возврата - перезапускается заново.

на других телефонах на Android 4.. и 5.. все нормально..

Использую Seattle ( грешил что не поддерживает андроид 6), вчера поставил Berlin - тоже самое, сегодня обновил SDK и NDK до последних - тоже самое.. не работают ( закрываются - вернее рестартит ) даже примеры..

Кто наблюдает такое же в 6ом Андроиде? или это телефон такой "неправильный" .. в какую сторону копать?

 

 

 

Изменено пользователем Сергей Сергеев
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Не совсем ответ на вопрос автора, но на верный путь понимания, почему многое на супердешевых телефонах работает не так, поможет встать статья «Почему мой телефон не обновится до нового андроеда?»

Ссылка на комментарий
  • 0
  • Модераторы

Андроед-телефоны, как и все вещи в 2016 году, собираются из каких-то ёбаных микросхем. 

начало ободряющее))

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
7 минут назад, Сергей Сергеев сказал:

Добавлю, само приложение LifeCicle рестартися постоянно на аппарате с 1Гб, после переключения, на аппарате с 2 Гб ведет лог со вчерашнего вечера! я и вк и ок и в браузере полазил.. забыв про него, а сейчас нашел в истории запуска - а оно живо и лог ведет со вчера событий своих.. так что тут не минутами пахнет.. 

Если хотите увидеть как на аппарате с 2Гб приложение будет выключено системой, то активнее полазайте по сайтам в браузере - например, откройте картинки в Google... через какое-то время приложение "помрет"

PS. Еще можете установить какую-нибудь прожорливую игрушку и поиграть в нее

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
  • Модераторы

Persistent работает только для системных приложений.

Попробуйте largeHeap установить в True, тогда памяти под ваше приложение будет выделено больше. И проведите тест с событиями.

А вообще, вам уже подсказали Vitaldj и Rusland, любые длительные операции пихаем в сервис.

 

Ссылка на комментарий
  • 0
22 минуты назад, Andrey Efimov сказал:

любые длительные операции пихаем в сервис.

На текущий момент и сервис не работает так как ожидается - после смерти от системы, приложение зависает при старте.

Ссылка на комментарий
  • 0
  • Администраторы

Так, я не все прочитал. Но добавлю пару слов на счет сворачивания и убивания приложения.

  1. Если вы нажимаете кнопку Back, то платформа FMX подаст запрос на уничтожение приложение. 
  2. Если вы нажимаете на кнопку Home, то приложение просто сворачивается без уничтожения.
  3. Первый и второй пункты - это поведение андроид приложений по умолчанию.
  4. Если вы не хотите, чтобы приложение принудительно грохалось по кнопки Back. То вам нужно перехватить нажатие этой кнопки и самостоятельно свернуть ваше приложение. Повесить обработчик TForm.OnKeyDown/OnKeyUp и в нем вызвать код по сворачиванию. И сбросить Key и KeyChar
    TAndroidHelper.Activity.moveTaskToBack(true);

А дальше все как обычно. Даже после сворачивания, система может уничтожить ваше приложение в любой момент времени по своему усмотрению.

Ссылка на комментарий
  • 0
3 часа назад, Andrey Efimov сказал:

Persistent работает только для системных приложений.

Попробуйте largeHeap установить в True, тогда памяти под ваше приложение будет выделено больше. И проведите тест с событиями.

А вообще, вам уже подсказали Vitaldj и Rusland, любые длительные операции пихаем в сервис.

 

LargeHeap не помогает, Lifecicle Restart ит после нажатия кнопки home..

Сервис - приделал к  Lifecicle сервис как на  видео , теперь все равно рестатрит основная форма - но в списке работающих приложений ( в настройках) - вижу его после нажатия домой ..

могу ли я в сервис положить свой  DataModuel в котором есть sqlconnection на сервер, который собственно и держит сессию на нем, несколько TclientDataSet, MemTable и TDSPProviderConnection ,

 и как это связывать с TListView, TEdit на форме, котороя получается "перерождается" постоянно.. 

 

Ссылка на комментарий
  • 0
34 минуты назад, Сергей Сергеев сказал:

LargeHeap не помогает, Lifecicle Restart ит после нажатия кнопки home..

Сервис - приделал к  Lifecicle сервис как на  видео , теперь все равно рестатрит основная форма - но в списке работающих приложений ( в настройках) - вижу его после нажатия домой ..

могу ли я в сервис положить свой  DataModuel в котором есть sqlconnection на сервер, который собственно и держит сессию на нем, несколько TclientDataSet, MemTable и TDSPProviderConnection ,

 и как это связывать с TListView, TEdit на форме, котороя получается "перерождается" постоянно.. 

 

Делаете SQLite базу данных, деплоите ее с приложением, работаете с ней и из приложения, и из сервиса

Ссылка на комментарий
  • 0
6 минут назад, Pax Beach сказал:

Делаете SQLite базу данных, деплоите ее с приложением, работаете с ней и из приложения, и из сервиса

Нет.. так не пойдет.. хранилище на MS SQL через ISAPI DataSnap пользователи получают доступ по логину паролю, на сервере DataSnap держит сессию послt идентификации.. зачем SQLlite? все время подкачивать туда данные? ну вообще это мед. информация.. хранить на клиенте в недрах андроида - нельзя

Ссылка на комментарий
  • 0
2 часа назад, Сергей Сергеев сказал:

Нет.. так не пойдет.. хранилище на MS SQL через ISAPI DataSnap пользователи получают доступ по логину паролю, на сервере DataSnap держит сессию послt идентификации.. зачем SQLlite? все время подкачивать туда данные? ну вообще это мед. информация.. хранить на клиенте в недрах андроида - нельзя

В смысле — нельзя — 152-ФЗ? Вы уже обрабатываете персональные данные, значит должны были получить на это разрешение разрешение.

В оперативной памяти хранятся данные, чем это от недр отличается? Можно передавать данные через LocalBroadcastReceiver, если объем не большой.

 

Ссылка на комментарий
  • 0
2 часа назад, Сергей Сергеев сказал:

Нет.. так не пойдет.. хранилище на MS SQL через ISAPI DataSnap пользователи получают доступ по логину паролю, на сервере DataSnap держит сессию послt идентификации.. зачем SQLlite? все время подкачивать туда данные? ну вообще это мед. информация.. хранить на клиенте в недрах андроида - нельзя

Храните не персонафицированные данные. Всмысле обезличенные, без ФИО и тд.... 

Ссылка на комментарий
  • 0
3 часа назад, Сергей Сергеев сказал:

LargeHeap не помогает, Lifecicle Restart ит после нажатия кнопки home..

Сервис - приделал к  Lifecicle сервис как на  видео , теперь все равно рестатрит основная форма - но в списке работающих приложений ( в настройках) - вижу его после нажатия домой ..

могу ли я в сервис положить свой  DataModuel в котором есть sqlconnection на сервер, который собственно и держит сессию на нем, несколько TclientDataSet, MemTable и TDSPProviderConnection ,

 и как это связывать с TListView, TEdit на форме, котороя получается "перерождается" постоянно.. 

 

1. Возможно я где-то пропустил в теме, но зачем держать соединение в сервисе ?

2. Связать можно как и обычно, из вашего приложения доступен DM сервиса, на котором может находится TMemData.

3.Опишите пожалуйста более подробнее задачи, которые перед Вами стоят, тогда ответы будут более продуктивны. Данная тема скорей всего архитектурный вопрос, а не вопрос потребления памяти.

Ссылка на комментарий
  • 0
6 минут назад, Fedor K сказал:

2. Связать можно как и обычно, из вашего приложения доступен DM сервиса, на котором может находится TMemData.

Вот с какой стати модуль будет доступен, если приложение и сервис — это разные проекты. 

Ссылка на комментарий
  • 0
12 часов назад, Pax Beach сказал:

Вот с какой стати модуль будет доступен, если приложение и сервис — это разные проекты. 

Да, Вы правы, у приложения и сервиса общий только Context, обмен инфой возможен только стандартными способами Android.

Ссылка на комментарий
  • 0
38 минут назад, Fedor K сказал:

Да, Вы правы, у приложения и сервиса общий только Context, обмен инфой возможен только стандартными способами Android.

Ярослав как-то упоминал BindService, но до сих пор тема сисек не раскрыта никакой конкретики. Может как-то через TLocalServiceConnection.LocalService можно получить доступ к данным в сервисе? 

 

Ссылка на комментарий
  • 0
1 час назад, Fedor K сказал:

Да, Вы правы, у приложения и сервиса общий только Context, обмен инфой возможен только стандартными способами Android.

ну тогда вся прелесть DataSnap ( отображение Датасетов в сессии сервера на  клиенте )  пропадает.. 

Архитектура Клиент-Сервер.. на сервере ISAPI модуль DateSnap - открывает ДатаСеты, заполняет MemTable

На Андроид Клиенте - Коннект на сервер с логин - паролем - пин код ( по смс) авторизацией . На сервере запускается сессия, она живет пока есть коннект с клиента. 

 Заполняются ClientDataSet из Серверных Датасетов . На клиенте это все в списки отображается ...  клиент тыкает в элементы списка и с сервера приходит датализированное описание..

Это все работает.. но есть просмотр файлов получаемых с сервера ( html,pdf, jpg  ) - сделано сохранением в доунлоад и открытием внешней программой по миме типу ( т.е. андроид предлагает выбрать из списка установленных..) а ткже есть отсылка емайла ( тоже запуск клиента мейла по умолчанию) т.е. происходит переключение задач.

Так вот на устройствах с 2 Гб ОП - после возврата из внешних программ - коннект на месте ( соответственно и сессия на сервере держится) что позволяет смотреть другой файл и т.д.

а на устр с 1 Гб - клиент прибивается сразу, достаточно свернуть его просто кнопкой - Домой, не говоря уже о запуске другого приложения ( просмотр ПДФ и т.д.), что приводит к закрыти. сессии не сервере, необходимости повторного логина.. Понятно, что можно делать Бэкдор - облегченный логин, для тех кто Оторвался не по своей воле, тикеты там на время.. и прочее... возможно придется делать так.. но это потенциальная дырка..  если другого не найдем решение - как вариант.. 

 

также выяснено, что захлопывается любое приложение Дельфи - даже из самплов - практически пустая форма, хотя памяти свбодной около 600 мб, приложение 16 мб..

вот такая проблема..

 

Изменено пользователем Сергей Сергеев
добавил
Ссылка на комментарий
  • 0
  • Модераторы
2 минуты назад, Сергей Сергеев сказал:

ну тогда вся прелесть DataSnap ( отображение Датасетов в сессии сервера на  клиенте )  пропадает.. 

Архитектура Клиент-Сервер.. на сервере ISAPI модуль DateSnap - открывает ДатаСеты, заполняет MemTable

На Андроид Клиенте - Коннект на сервер с логин - паролем - пин код ( по смс) авторизацией . На сервере запускается сессия, она живет пока есть коннект с клиента. 

 Заполняются ClientDataSet из Серверных Датасетов . На клиенте это все в списки отображается ...  клиент тыкает в элементы списка и с сервера приходит датализированное описание..

Это все работает.. но есть просмотр файлов получаемых с сервера ( html,pdf, jpg  ) - сделано сохранением в доунлоад и открытием внешней программой по миме типу ( т.е. андроид предлагает выбрать из списка установленных..) а ткже есть отсылка емайла ( тоже запуск клиента мейла по умолчанию) т.е. происходит переключение задач.

Так вот на устройствах с 2 Гб ОП - после возврата из внешних программ - коннект на месте ( соответственно и сессия на сервере держится) что позволяет смотреть другой файл и т.д.

а на устр с 1 Гб - клиент прибивается сразу, достаточно свернуть его просто кнопкой - Домой, не говоря уже о запуске другого приложения ( просмотр ПДФ и т.д.)

также выяснено, что захлопывается любое приложение Дельфи - даже из самплов - практически пустая форма, хотя памяти свбодной около 600 мб, приложение 16 мб..

вот такая проблема..

такая архитектура подходит для Windows/Mac, для мобильных это не вариант. также как и использовать прямой коннект к ДБ, все это летит к чертям при переключении станции связи (2G/3G/4G), Wi-Fi

единственно живой и верный вариант использовать запрос-ответ (трех звенку)

Ссылка на комментарий
  • 0
16 часов назад, Pax Beach сказал:

В смысле — нельзя — 152-ФЗ? Вы уже обрабатываете персональные данные, значит должны были получить на это разрешение разрешение.

В оперативной памяти хранятся данные, чем это от недр отличается? Можно передавать данные через LocalBroadcastReceiver, если объем не большой.

 

Ну т.е. сервис подкачивает инфу в локал. базу.. а клиент просто из нее смотрит? без всяких логинов ? 

и вопрос - при прибивании Андроидом приложения OnSaveState - не вызывается вроде.. а как же сохранить состояние Листов и прочего..

 

Изменено пользователем Сергей Сергеев
Ссылка на комментарий
  • 0
10 минут назад, ZuBy сказал:

такая архитектура подходит для Windows/Mac, для мобильных это не вариант. также как и использовать прямой коннект к ДБ, все это летит к чертям при переключении станции связи (2G/3G/4G), Wi-Fi

единственно живой и верный вариант использовать запрос-ответ (трех звенку)

Ну так датаснап и есть третье звено между клиентом и сервером, в нем и держится вся инфо, то  там механизм сессий - по конекту.. сбрасывается при обрыве... 

а запрос - ответ - требует же нового коннекта каждый раз..   требование - при кадждом подключении - подтверждение пин кодом..

Ссылка на комментарий
  • 0
  • Модераторы
27 минут назад, Сергей Сергеев сказал:

а запрос - ответ - требует же нового коннекта каждый раз..   требование - при кадждом подключении - подтверждение пин кодом..

в чем проблема?

1) при авторизации выдать клиенту токен

2) токен записать в базу и ограничить по времени

3) при каждом новом заходе в приложение, старый токен убивать, новый выдавать (вот вам сессия)

4) при "живой сессии" не запрашивать пин-код

5) Profit!

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
16 минут назад, ZuBy сказал:

в чем проблема?

1) при авторизации выдать клиенту токен

2) токен записать в базу и ограничить по времени

3) при каждом новом заходе в приложение, старый токен убивать, новый выдавать (вот вам сессия)

4) при "живой сессии" не запрашивать пин-код

5) Profit!

есть такой путь.. я его описал чуть выше :

Цитата

Понятно, что можно делать Бэкдор - облегченный логин, для тех кто Оторвался не по своей воле, тикеты там на время.. и прочее... возможно придется делать так.. но это потенциальная дырка..  если другого не найдем решение - как вариант.. 

Придется по новой заполнять всю начальную инфу на сервере ( например там есть список файлов клиента), который получается сканированием определенных директорий, при каждом коннекте , раньше я с клиента просто говорил - дай файл №5 .. в сессии по MemTable искал№5 - брал его путь и отсылал клиенту..

 

понятно, что все решаемо.. всякими бубнами.. но весь этот стройный и удобный механизм ДатаСнап летит.. используется только для начального заполнения.. к чему эти все циклы статей и видео - как прекрасно на дельфи используя датаснап делать приложения для Анроида, если клиент прибивается, только ты решил отправить СМС? и сесииян на сервере захлопнулась.. со всеми вытекающими..  

Ссылка на комментарий
  • 0

Ура! Проблема решилась.. т.е. стало работать не рестартуя после свертывания и т.д. 

все дело в "галочке"

Цитата

«Не сохранять операции» — именно таким странным образом переведена фраза «Do not keep activities» в настройках Android. А описание «Удалять все операции сразу после их завершения пользователем» не добавляет ясности. Включается она в меню «Параметры разработчика» (Developer Options), находится в самом низу.

Работает эта настройка очень просто, когда она включена, все неактивные активити умирают. Т.е. после перехода из активити A в активити B, активити A уничтожается. Таким образом можно проверить насколько вписывается ваше приложение в activity lifecycle.
на хабре

Это я поставил эту отметку в новом телефоне, после включения режима разработчика.. очень мне не понравились слова про  сохранения моих действий :)

и все "простые" приложения, не сохраняющие свое состояние , после рестарта оказывались в начальном положении.

Отключил.. и все стало работать, приложение живет, благо памяти хватает, на сеанс просмотра инфы - 10-15 мин явно хватит и при запуске вьеверов и мейла.. ну уж если вытеснит его из памяти, значит пользователь чем то таким уж занялся посторонним, что после этого и перелогиниться, думаю, его не удивит.. :) 

Изменено пользователем Сергей Сергеев
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...