Должен ли пользовательский модуль запуска Android как-то сигнализировать о том, что он готов (потому что я не получаю BOOT_COMPLETED с моим модулем запуска)?

Должен ли пользовательский лаунчер Android каким-то образом сигнализировать о том, что он готов?

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

Почему BOOT_COMPLETED не отправляется, когда я делаю свой собственный лаунчер по сравнению с собственным лаунчером системы? Мой лаунчер работает хорошо, за исключением того, что BOOT_COMPLETED никогда не транслируется, когда я его использую.

ОБНОВЛЕНИЕ
Похоже, что действие программы запуска должно быть видимым (и доступным для касания?) по крайней мере до тех пор, пока не будет отправлено сообщение BOOT_COMPLETED, в противном случае сообщение BOOT_COMPLETED вообще не будет отправлено. Кто-нибудь может это подтвердить?

Я использую черную активность с этим, и это не работает:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
            | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
            | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

ОБНОВЛЕНИЕ Я получаю это в журналах, чтобы показать вам, что BOOT_COMPLETED действительно не отправляется:

01-04 17:33:39.384 541-599/system_process W/AudioService: onLoadSoundEffects() called before boot complete

Через 20 минут все еще так. Я на КитКат 4.4.4.

ОБНОВЛЕНИЕ

Манифест запуска:

<activity android:name=".application.HomeInterceptorActivity"
          android:label="@string/app_name"
          android:launchMode="singleTop"
          android:clearTaskOnLaunch="true"
          android:stateNotNeeded="true"
          android:theme="@style/Invisible"
          android:excludeFromRecents="true"
          android:exported="false"
          android:noHistory="true">
          <!--android:taskAffinity="">-->
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.HOME"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <!--<category android:name="android.intent.category.LAUNCHER"/>-->
    </intent-filter>
</activity>

ОБНОВЛЕНИЕ Кажется, проблема возникает, если другая активность запускается непосредственно в onResume() лаунчера до отправки BOOT_COMPLETED (хотя это вполне может быть совпадением, вызванным некоторыми состояние гонки). Похоже, что программа запуска должна потратить некоторое время на собственные действия, чтобы разрешить отправку BOOT_COMPLETED.


person JohnyTex    schedule 04.01.2017    source источник
comment
Должна ли пользовательская программа запуска Android каким-то образом сигнализировать о своей готовности? Нет, программа запуска — это просто приложение, система — это та, которая сигнализирует о завершении загрузки всем задействованным приложениям, включая программы запуска. Но не смущайтесь, когда BOOT_COMPLETED транслируется системой, лаунчер уже запущен... Почему не отправляется BOOT_COMPLETED. Я предполагаю, что произошла ошибка либо при регистрации BroadcastReceiver, либо при получении Action. Вы должны опубликовать соответствующий код.   -  person Onik    schedule 04.01.2017
comment
ХОРОШО. Дело в том, что BOOT_COMPLETED не отправляется даже в системных журналах. Звук даже не работает, потому что он не инициализирован до BOOT_COMPLETED. Я знаю, что мои получатели верны, потому что они работают, когда фактически отправляется BOOT_COMPLETED.   -  person JohnyTex    schedule 04.01.2017
comment
Я имею в виду, что моя программа запуска появляется при перезапуске устройства (отображается не при BOOT_COMPLETED, а раньше). Это также показывает мою активность, когда я нажимаю домой. Звуковой драйвер, кажется, запускается при BOOT_COMPLETED, но, поскольку он никогда не отправляется, звук не слышен, например, когда я нажимаю кнопки.   -  person JohnyTex    schedule 04.01.2017
comment
Я так думаю, да. Проблема, кажется, появляется, когда я исследую здесь, когда я запускаю другую активность в onResume() непосредственно в своей активности запуска. Есть мысли по этому поводу?   -  person JohnyTex    schedule 04.01.2017
comment
Полагаю, да?? Вы создаете пользовательское ПЗУ или просто приложение запуска для стокового Android?..._когда я запускаю другое действие в onResume() непосредственно в моем пусковом устройстве_ Мое лучшее предположение состоит в том, что к тому времени, когда onResume() возвращает пусковое устройство HomeInterceptorActivity, это не top Activity в заднем стеке из-за запуска нового Activity. У вас есть спецификация для этого?   -  person Onik    schedule 04.01.2017
comment
Насколько я знаю, это стоковая прошивка. Это устройство Pipo X8, и я не думаю, что они внесли какие-либо изменения в прошивку. Я не пишу кастомный ром.   -  person JohnyTex    schedule 10.01.2017
comment
Почему важно, чтобы HomeInterceptorActivity была основной активностью для отправки BOOT_COMPLETED? Не странно ли, что ошибка программиста может помешать загрузке устройства в таком случае?   -  person JohnyTex    schedule 12.01.2017
comment
Почему важно, чтобы HomeInterceptorActivity было верхней активностью для отправки BOOT_COMPLETED? Не уверен на 100 % (нужно посмотреть исходники), но, кажется, в случае домашнего Activity проверяется дополнительное условие и/или метод вызывается после возврата onResume() (прямо перед тем, как Activity становится видимым)... Не странно ли, что ошибка программиста может помешать загрузке устройства в таком случае? Частично согласен - вы как бы нарушаете жизненный цикл здесь, onResume() имеет специальное намерение, упомянутое выше...   -  person Onik    schedule 12.01.2017
comment
Как вы думаете, будет ли безопасно запускать другую активность непосредственно в onResume() только после получения BOOT_COMPLETED? Могу ли я каким-то образом опубликовать (отложить) начало другого действия, чтобы убедиться, что это зависимое условие/метод выполняется до запуска нового действия?   -  person JohnyTex    schedule 18.01.2017
comment
Если я запускаю Activity в Handler#postDelayed() с задержкой в ​​1 секунду, это работает, что, кажется, указывает на то, что вы правы. Кое-что нужно закончить. Просто не знаю чего и чего ждать.   -  person JohnyTex    schedule 18.01.2017
comment
Что-то нужно доделать Иерархия представлений должна быть отрисована (стать видимой), это происходит в какой-то момент после возврата onResume(). Вы должны начать новый Activity либо при просмотре размещен или внутри другого потока, чей Runnable будет обрабатываться после отображения представлений или использования Handler задержки.   -  person Onik    schedule 18.01.2017
comment
Кажется, Android может заблокировать сам startActivity() вместо того, чтобы узнать, готов ли он? Таким образом, получение rootLayout гарантирует правильное размещение представлений?   -  person JohnyTex    schedule 18.01.2017
comment
Кажется, Android мог бы затормозить startActivity() вместо того, чтобы узнать, готова ли я? Извините, мне не ясно, что вы имеете в виду. Значит, получение rootLayout гарантирует правильное расположение представлений? Каждый из трех предложенных подходов должен работать.   -  person Onik    schedule 18.01.2017