Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FMX, android, вращающийся кружок "ожидания" / 17 сообщений из 17, страница 1 из 1
22.03.2019, 07:47
    #39789883
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Добрый день!

Помогите, пожалуйста.
Приложение через интернет получает сведения и показывает их в listbox. Хочется сделать как у людей - вращающийся кружок по центру, пока приходят данные и заполняется listbox.
Сделал через TTask.Run, делаю видимым layer с arc, нашел в интернетах, работает.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
  TTask.Run(
    procedure
    var
      arr: array [0 .. 0] of ITask; //в примере было [0..1] )) 

    begin
      try
        TThread.Synchronize(nil,
          procedure
          begin
            layPB.Visible := True; //делаю видимым layer с arc
            layPB.BringToFront;
          end);

        arr[0] := TTask.Run( //запускаю поток для получения данных
          procedure
          var
            ...
          begin
            try
              AP := TStringList.Create;
              AJSONText := idHttpPost('/mobapi/getlist', AP, IsExcepted);
            finally
              AP.Free;
            end;

            if IsExcepted then
            begin
              ...
              Exit;
            end;

            if CheckContentIsJSON(AJSONText) then
              try
                try
                  AJSON := TJSONObject.ParseJSONValue(AJSONText) as TJSONObject;
                  ...
                  TThread.Synchronize(nil, //по идее тут уже arc перестает вращается и это неаккуратно выглядит :)
                    procedure
                    begin
                      try
                        lbListDebtors.BeginUpdate;
                        lbListDebtors.Items.Clear;
                        ... //тут уже заполнение списка

...
        TTask.WaitForAll(arr);

      finally
        TThread.Synchronize(nil,
          procedure
          begin
            layPB.Visible := False;
            if AnErrorMessageAfterPB <> '' then
              ShowMessage(AnErrorMessageAfterPB);
          end);
      end;
    end);


Но: интернет, на котором тестируется, довольно медленный, список, который заполняется, довольно большой, а телефон, на котором тестирую, довольно старый. Для заполнения listbox приходится использовать Synchronize, иначе валятся ошибки (видимо как в windows нельзя заполнять визуальные компоненты из потока). И получается так, что пока работает idHttp - кружок вращается плавно, а потом, когда заполняются данные, кружок стоит. Это все явно не правильно )
Подскажите, как правильно сделать панельку ожидания с плавно вращающимся кружком, без запинаний?

Спасибо!
...
Рейтинг: 0 / 0
22.03.2019, 08:21
    #39789886
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Devillio,

а подскажите, после заполнения списка, поток ещё нужен? Если нет, то наверное лучше дождаться данных из потока и заполнить список не из потока...
...
Рейтинг: 0 / 0
22.03.2019, 08:28
    #39789889
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
goldmi45, да, так и есть же. В потоке получаем данные (wait крутится плавно), не в потоке данные заполняем (wait не крутится, ждет заполнения). Но список заполняется не мгновенно, почти секунду на моем стааареньком lg leon.
Очень хочется, чтобы wait крутился на всем этапе - от получения до полного заполнения.
...
Рейтинг: 0 / 0
22.03.2019, 09:04
    #39789892
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
только если заполнять маленькими порциями через Synchronize. других вариантов в голову не приходит
...
Рейтинг: 0 / 0
22.03.2019, 11:29
    #39789956
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Да, заполнять порциями. Это помимо визуальной отзывчивости поможет избежать ANR.
...
Рейтинг: 0 / 0
22.03.2019, 12:38
    #39789992
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Василий 2, что такое ANR? Гугл тоже не знает )

Переделал на порционность, перестает работать ListBox.BeginUpdate и ListBox.EndUpdate (я их тоже в отдельных Synchronize запускал). Если их убрать, то да, работает. Чуууточку подергивается, но вращается. Вместо BeginUpdate пришлось использовать Visible := False; иначе видно как каждый Item прогружается.
Но имхо это не так должно делаться. В других приложениях такие задержки красиво ровно без рывков вращаются.
...
Рейтинг: 0 / 0
22.03.2019, 12:40
    #39789998
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Devillio,

Application Not Responding
Проложение не отвечает - хотите его закрыть?
...
Рейтинг: 0 / 0
22.03.2019, 12:43
    #39789999
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Cobalt747, благодарю
...
Рейтинг: 0 / 0
22.03.2019, 14:40
    #39790094
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
DevillioВасилий 2, что такое ANR? Гугл тоже не знает )
Какой-то у тебя странный гугл...
...
Рейтинг: 0 / 0
22.03.2019, 14:44
    #39790098
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Можно и скорее всего будет разумнее грузить пачками по нескольку элементов. Что же касается плавности анимации, можно и от обратного пойти - крутить ее в отдельном треде, а в список грузить в основном (не знаю, реализуемо ли такое в Андроид). Все равно анимация модальная.
...
Рейтинг: 0 / 0
22.03.2019, 14:47
    #39790101
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Василий 2,

если ты часто роешься по андроидной доке - гугл это запоминает

У меня, например, это только третья ссылка, а сначала идут

Сбои и ошибки ANR ("Приложение не отвечает") - Cправка - Play ...
https://support.google.com/googleplay/.../6083203?hl...‎
В Play Console можно посмотреть информацию о сбоях приложений и ошибках ANR ("Приложение не отвечает"). Сведения поступают с устройств ...

ANR — Википедия
https://ru.wikipedia.org/wiki/ANR‎
ANR — аббревиатура с рядом значений, в частности: Аккинени Нагесвара Рао (1923—2014) — индийский актёр и продюсер, наиболее влиятельная ...

а DDG, который типа как "не шпионит за вами" и того разнообразнее

Urban Dictionary: ANR/ABF
www.urbandictionary.com/define.php?term=ANR/ABF
ANR/ABF stands for: A Nursing Relationship/Adult Breast Feeding. ANR/ABF refers to a relationship involving sucking milk from the female breast as an expression of close intimacy. Adult Nursing Relationships depend on a stable and long term relationship of the couple, otherwise it is nearly impossible to maintain a steady milk flow.
Dreams of Milk | ABF ANR - Adult Nursing Relationships
dreamsofmilk.com
Dreams of Milk is a community devoted to couples and singles alike that wish to experience the benefits and intimacy of the ANR/ABF lifestyle.
ANR - What does ANR stand for? The Free Dictionary
acronyms.thefreedictionary.com/ANR
UC ANR leadership also supported the establishment of a climate change program team in 2015, with the primary goal of building capacity within UC Cooperative Extension to better serve the public in addressing climate change impacts and adaptation challenges.
Home | Agency of Natural Resources
anr.vermont.gov
To preserve, enhance, restore and conserve Vermont's natural resources and protect human health for the benefit of this and future generations.
...
Рейтинг: 0 / 0
22.03.2019, 14:48
    #39790104
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Василий 2плавности анимации, можно и от обратного пойти - крутить ее в отдельном треде

а её вообще надо крутить???

нельзя просто сделать animated PNG или GIF ?
...
Рейтинг: 0 / 0
22.03.2019, 16:01
    #39790175
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Ariochа её вообще надо крутить???

нельзя просто сделать animated PNG или GIF ?
А animated PNG или GIF, по-твоему, Пушкин крутит? Те же самые вторичные потоки либо таймер в главном
...
Рейтинг: 0 / 0
22.03.2019, 17:22
    #39790225
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Василий 2,

Ну так это уже ОС будет с теми потоками разбираться с вторичными, нет?

чем самому велосипедить втёмную - использовтаь готовые?
...
Рейтинг: 0 / 0
22.03.2019, 18:02
    #39790254
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
Отказаться от использования Synchronize.

Пусть основной поток крутит кружек, ожидая поступления информации от расчетного.
...
Рейтинг: 0 / 0
25.03.2019, 10:51
    #39790810
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
AriochВасилий 2,

Ну так это уже ОС будет с теми потоками разбираться с вторичными, нет?

чем самому велосипедить втёмную - использовтаь готовые?
Разве что в Андроиде есть готовый компонент/функция "семицветика"... На виндах, емнип, анимации крутились из главного потока
...
Рейтинг: 0 / 0
25.03.2019, 16:27
    #39791042
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FMX, android, вращающийся кружок "ожидания"
В общем, если кому потребуется:
Лучше использовать ListView, чем ListBox
ListView забайндить с ClientDataSet. Последний без ошибок заполняется из потока.
Делаем DisableControls, EnableControls (эти через Synchronize). А между ними - заполняем.
Работает намного быстрее, кружок крутится плавно :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FMX, android, вращающийся кружок "ожидания" / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]