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

Зависание приложения при разворачивании после поворота экрана, Android


Alex7wrt

Вопрос

Здравствуйте.

Есть следующая проблема: в приложении реализована смена отображения контролов при повороте экрана. Все работает нормально, то есть экран поворачивается и контролы меняют свои позиции. Однако, если свернуть приложение, после чего повернуть экран, а затем снова развернуть приложение, то ничего не отображается (точнее отображается черный экран) и приложение зависает. Это происходит если в свернутом режиме повернуть экран не в ту ориентацию, в которой он был до сворачивания. Если же поворачивать экран много раз, а в конце вернуть в эту же ориентацию, то приложение нормально запускается. Проблема не исчезает, если убрать обработку события OnResize формы. Среда XE10. Прошу подсказать, в чем может быть проблема. 

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

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

  • 0

Тут если только смотреть ваш проект, иначе получится просто гадание. Выложите, чтобы участники форума могли вам помочь.

Можно накидать небольшой примерчик с изменением отображения контролов (я так понимаю меняется их положение при поворотах), в котором воспроизводится эта проблема.

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

Я даже не знаю, какой участок кода выложить. Ведь зависание происходит даже когда нет обработки события OnResize формы. А что еще может влиять при повторном разворачивании приложения? Обработки событий изменения активности формы нет, обработки OnShow, OnActivate формы также нет. 

 

 

Можно накидать небольшой примерчик с изменением отображения контролов (я так понимаю меняется их положение при поворотах), в котором воспроизводится эта проблема.

Изменение положения происходит в обработке события OnResize формы. Но даже если не обрабатывать это событие, то есть не менять положение контролов, то проблема остается. Насколько я понимаю,  это значит, что не в изменении положений контролов дело, и вообще ни в чем том, что написано в обработчике OnResize.

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="%package%"
        android:versionCode="%versionCode%"
        android:versionName="%versionName%"
        android:installLocation="%installLocation%">

    <!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
<%uses-permission%>
    <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
    <application android:persistent="%persistent%" 
        android:restoreAnyVersion="%restoreAnyVersion%" 
        android:label="%label%" 
        android:debuggable="%debuggable%" 
        android:largeHeap="%largeHeap%"
        android:icon="%icon%"
        android:theme="%theme%"
        android:hardwareAccelerated="%hardwareAccelerated%">

<%application-meta-data%>
		<%services%>
        <!-- Our activity is a subclass of the built-in NativeActivity framework class.
             This will take care of integrating with our NDK code. -->
        <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
                android:launchMode="singleTask">
            <!-- Tell NativeActivity the name of our .so -->
            <meta-data android:name="android.app.lib_name"
                android:value="%libNameValue%" />
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter> 
        </activity>
        <%activity%>
        <%receivers%>
    </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

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

Чего гадать?!

Выкладывайте исходники (минимальные) для воспроизведения проблемы + интересно, что пишется в логах в момент зависания.

А то так долго гадать будем...

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

Тогда прошу подсказать, что выложить? Обработку каких событий? OnResize я отключил. OnCreate разве происходит при разворачивании приложения из фона? OnShow, OnActive у меня нет и ничего другого тоже.

 

Про логи очень интересно. А как узнать, что пишется в логах? Никогда раньше этого не делал.

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

В пустом проекте тоже самое происходит? В общем, создайте пустой проект, накидайте контролов и посмотрите, что происходит. Если есть зависание, то его и скидывайте сюда, а если нет, то продолжайте добавлять функционал и проверяйте.

Логи можно через Студию посмотреть в дебаг режиме, а можно через monitor.bat.

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

Про логи очень интересно. А как узнать, что пишется в логах? Никогда раньше этого не делал.

Запускайте Android Device Monitor

Путь примерно такой (в зависимости от версии):

C:\Users\All Users\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\tools\monitor.bat

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

В пустом проекте тоже самое происходит? В общем, создайте пустой проект, накидайте контролов и посмотрите, что происходит. Если есть зависание, то его и скидывайте сюда, а если нет, то продолжайте добавлять функционал и проверяйте.

Логи можно через Студию посмотреть в дебаг режиме, а можно через monitor.bat.

 

Запускайте Android Device Monitor

Путь примерно такой (в зависимости от версии):

C:\Users\All Users\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\tools\monitor.bat

 

Спасибо. Буду пробовать.

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

Вычислил проблему - оказалось, что в XE10 это происходит при наличии на форме компонента TBannerAD. Если его нет, проблема не наблюдается. В XE7, этот же проект, проблемы нет с этим компонентом. 

 

Напомню суть проблемы:

 

Есть следующая проблема: в приложении реализована смена отображения контролов при повороте экрана. Все работает нормально, то есть экран поворачивается и контролы меняют свои позиции. Однако, если свернуть приложение, после чего повернуть экран, а затем снова развернуть приложение, то ничего не отображается (точнее отображается черный экран) и приложение зависает. Это происходит если в свернутом режиме повернуть экран не в ту ориентацию, в которой он был до сворачивания. Если же поворачивать экран много раз, а в конце вернуть в эту же ориентацию, то приложение нормально запускается. Проблема не исчезает, если убрать обработку события OnResize формы. Среда XE10. 

Это глюк самой среды или что-то нужно настроить? Галочка Admob в настройках стоит.

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

Полностью пустой новый проект. 
При простом добавлении на форму TBannerAD наблюдается описанная выше проблема.

Приложение открывается, экран поворачивается нормально сколько угодно раз. Но стоит свернуть приложение, повернуть экран в другую ориентацию, и снова запустить, как приложение виснет.

Среда 10.1. В настройках проекта включен AdmobService.

Template манифеста

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="%package%"
        android:versionCode="%versionCode%"
        android:versionName="%versionName%"
        android:installLocation="%installLocation%">

    <!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
<%uses-permission%>
    <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
    <application android:persistent="%persistent%" 
        android:restoreAnyVersion="%restoreAnyVersion%" 
        android:label="%label%" 
        android:debuggable="%debuggable%" 
        android:largeHeap="%largeHeap%"
        android:icon="%icon%"
        android:theme="%theme%"
        android:hardwareAccelerated="%hardwareAccelerated%">

<%application-meta-data%>
		<%services%>
        <!-- Our activity is a subclass of the built-in NativeActivity framework class.
             This will take care of integrating with our NDK code. -->
        <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
                android:launchMode="singleTask">
            <!-- Tell NativeActivity the name of our .so -->
            <meta-data android:name="android.app.lib_name"
                android:value="%libNameValue%" />
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter> 
        </activity>
        <%activity%>
        <%receivers%>
    </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

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

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

Я так понимаю,у меня одного возникает такая проблема, и никто с таким не встречался?
Может быть стоит создавать баннер средствами JNI на основе стандартного баннера Android?
Тут еще такой вопрос: в Berlin есть модуль FMX.Advertising.Android. Есть ли у кого-нибудь опыт работы с этим модулем?

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

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

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

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

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

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

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

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

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

×
×
  • Создать...