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

CallInUIThread has been deprecated


Вопрос

В последнем обновлении RAD Studio 10.2 Tokyo, говорится следующее:

Цитата

Unification of Delphi and Java threads on Android: CallInUIThread has been deprecated. All code is now running in the Java UI Thread, removing the need for thread synchronization.

The ProcessMessages method used to call the CheckSynchronize method, which called callbacks from the Java Native thread. There used to be two threads: the Delphi UI thread and the Java Native thread. After the refactoring work in 10.2, there is only one thread: the Java Native thread, which receives all notifications from Android and forwards them to the Delphi event handlers. While it is blocked via the while cycle, no event handler can be executed, preventing an exit from the cycle. Callbacks and events in general are called if there is no code holding the app main thread.

Собственно, после обновления на RAD Studio 10.2 Tokyo, на некоторых Android-устройствах возникает ошибка "Can not activate current context". У меня такой ошибки не возникает, а отловить вслепую очень сложно. Я думаю, ошибка напрямую связана с этим изменением. Как можно решить данную проблему, на какие операции в коде нужно обратить внимание?

Application crash with 'Can not activate current context' exception (посмотреть не могу):
https://quality.embarcadero.com/browse/RSP-17189

 

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

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

  • 0
42 минуты назад, Данил Абдрафиков сказал:

Application crash with 'Can not activate current context' exception (посмотреть не могу):

один из комментов, остальное мусор:

I also experienced this exception.
I had to delete two glowanimations and then it did not except anymore (which is not really a solution).

 

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

Я не использую GlowAnimations. Нашёл девайс, на котором возникает данная проблема. Кратко распишу код:

В b считывается длина строки, а далее в bb[0] считывается сама строка:

 InStream := TResourceStream.Create(HInstance, 'Resource_' + IntToStr(x), RT_RCDATA);
 InStream.Seek(0, soFromBeginning);
 InStream.Seek(5, soFromCurrent);
 InStream.Read(b, 1);
 SetLength(bb, b);
 InStream.Read(bb[0], b);

Загрузка .PNG изображения из TMemoryStream в Timage:

  mm := TMemoryStream.Create;
  mm.CopyFrom(InStream, InStream.Size - 6 - b);
  mm.Seek(0, soFromBeginning);
  img1.Bitmap.LoadFromStream(mm);

Ошибка возникает на строке: 

img1.Bitmap.LoadFromStream(mm);

Ошибка, скорее всего, связана с TMemorySteam, и возникает она, только на определённых устройствах. Какие есть мысли по этому поводу?

Скрытый текст

 

01.thumb.png.6dd6262053f11b557666c9c1fd078697.png

 

 

Изменено пользователем Данил Абдрафиков
Ссылка на комментарий
  • 0
InStream.Seek(0, soFromBeginning);
InStream.Seek(5, soFromCurrent); //почему не просто InStream.Seek(5, soFromBeginning); или InStream.position := 5 ?
InStream.Read(b, 1); // длина строки входит в 1 байт? от 0 до 255??
SetLength(bb, b); // установить длину строки bb в b символов
InStream.Read(bb[0], b); // прочитать в строку bb b байтов. Но строка должна содержать b*sizeof(char) байтов, т.е. 2b...

ну и в mm попадает вообще максимум 255 - 6 - b это вообще непонятная формула

до битмапа там вообще непонятно что доходит

mm.CopyFrom(InStream, InStream.Size - 6 - b);// позиция InStream не определена. я бы сделал хотя бы InStream.position := 0;

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

позиция InStream не определена.

определена. Начало потока + 6 байт + количество байт, ушедших в строку.

Правильнее будет сделать mm.CopyFrom(InStream, InStream.Size - InStream.Position); , но не суть.

А вот с путаницей байты-символы это да, это печалька.

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

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

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

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

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

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

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

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

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

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

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