Почему TileService ждет несколько секунд, чтобы начать действие?
Я использую 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, поскольку я не могу воспроизвести ее на эмуляторе.
0 ответов
@RequiresApi(Build.VERSION_CODES.N)
class TileSettingClass : TileService() {
override fun onClick() {
super.onClick()
val tile = qsTile
if (tile.state == Tile.STATE_INACTIVE) {
tile.state = Tile.STATE_ACTIVE
val intent = Intent(this.applicationContext, YourActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.action = "yourAction"
applicationContext.startActivity(intent)
} else {
tile.state = Tile.STATE_INACTIVE
}
tile.updateTile()
}
}
Манифесты
<service
android:name=".main.service.TileSettingClass"
android:icon="@drawable/ic_tile_setting"
android:label="@string/milliy"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
>
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>