Должен ли пользовательский лаунчер 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.
BOOT_COMPLETED
транслируется системой, лаунчер уже запущен... Почему не отправляется BOOT_COMPLETED. Я предполагаю, что произошла ошибка либо при регистрацииBroadcastReceiver
, либо при полученииAction
. Вы должны опубликовать соответствующий код. - person Onik   schedule 04.01.2017Android
?..._когда я запускаю другое действие в onResume() непосредственно в моем пусковом устройстве_ Мое лучшее предположение состоит в том, что к тому времени, когдаonResume()
возвращает пусковое устройствоHomeInterceptorActivity
, это не topActivity
в заднем стеке из-за запуска новогоActivity
. У вас есть спецификация для этого? - person Onik   schedule 04.01.2017HomeInterceptorActivity
было верхней активностью для отправки BOOT_COMPLETED? Не уверен на 100 % (нужно посмотреть исходники), но, кажется, в случае домашнегоActivity
проверяется дополнительное условие и/или метод вызывается после возвратаonResume()
(прямо перед тем, какActivity
становится видимым)... Не странно ли, что ошибка программиста может помешать загрузке устройства в таком случае? Частично согласен - вы как бы нарушаете жизненный цикл здесь,onResume()
имеет специальное намерение, упомянутое выше... - person Onik   schedule 12.01.2017onResume()
. Вы должны начать новыйActivity
либо при просмотре размещен или внутри другого потока, чейRunnable
будет обрабатываться после отображения представлений или использованияHandler
задержки. - person Onik   schedule 18.01.2017