Я использую TileService
в качестве ярлыка, чтобы открыть Activity
моего приложения.Он делает только это и не имеет состояния.
Это выглядит так:
class QuickAccessTileService : TileService() {
override fun onClick() {
super.onClick()
val intent = Intent(this, SlideOverActivity::class.java)
.addFlags(FLAG_ACTIVITY_NEW_TASK)
startActivityAndCollapse(intent)
}
}
и объявлено в AndroidManifest
как:
<service
android:name=".service.QuickAccessTileService"
android:icon="@drawable/ic_home"
android:label="@string/tile_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
Как этостоит, это работает.Однако, когда мое приложение остановлено, в следующий раз, когда я пытаюсь открыть его через панель быстрых настроек, требуется несколько секунд для запуска действия.
Вотчто я знаю:
Само по себе задание не замедляется.Попытка открыть его через , вместо этого запускающее устройство делает это совершенно ясным.
Кажется, что Service
требуется для запуска, прежде чем onClick
даже будет выполнен.Это имеет смысл;Service
, вероятно, не работает в фоновом режиме, ничего не делая, пока приложение не запущено.Однако это означает, что когда система обнаруживает щелчок по моим Tile
, , Service
необходимо сначала воссоздать , что занимает слишком много времени.
Я не уверенкуда идти дальше - если мои предположения даже верны.
РЕДАКТИРОВАТЬ: В качестве важного дополнения, я могу воспроизвести это на OnePlus 7 Pro, работающем на Android Pie.Это может быть проблема, связанная с OnePlus, поскольку я не могу воспроизвести ее на эмуляторе.