Android 为什么TileService要等待几秒钟才能启动活动?

Android 为什么TileService要等待几秒钟才能启动活动?,android,android-service,android-app-quick-setting,Android,Android Service,Android App Quick Setting,我正在使用TileService作为打开我的应用程序的活动的快捷方式。它只是这样做,没有状态 看起来是这样的: class QuickAccessTileService : TileService() { override fun onClick() { super.onClick() val intent = Intent(this, SlideOverActivity::class.java) .addFlags(FLAG

我正在使用
TileService
作为打开我的应用程序的
活动的快捷方式。它只是这样做,没有状态

看起来是这样的:


class QuickAccessTileService : TileService() {

    override fun onClick() {
        super.onClick()

        val intent = Intent(this, SlideOverActivity::class.java)
            .addFlags(FLAG_ACTIVITY_NEW_TASK)

        startActivityAndCollapse(intent)
    }
}
它在
AndroidManifest
中声明为:


目前看来,这是可行的。但是,当我的应用程序停止时,下次我尝试通过“快速设置”面板打开它时,需要几秒钟才能启动活动

以下是我所知道的:

这项活动本身启动起来并不慢。相反,尝试通过启动器打开它会让事情变得非常清楚

在执行
onClick
之前,
服务似乎需要一段时间才能启动。这是有道理的;
服务
可能不会在后台运行,而在应用程序未运行时什么也不做。但是,这意味着当系统检测到单击我的
磁贴时,必须首先重新创建
服务
,这需要花费很长时间

如果我的猜测是正确的,我不知道从这里该往哪里走

编辑:作为一个重要的补充,我可以在Android Pie上运行的OnePlus 7 Pro上重现这一点。这可能是OnePlus特有的问题,因为我无法在模拟器上复制它

@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>


如果尚未执行此操作,请在
QuickAccessTileService
中重写
onCreate()
onBind()
,链接到超类并记录调用它们的时间。还要记录调用
onClick()
的时间。这将有望为您提供一些线索,说明流程的哪一步是慢的:创建服务的速度慢,创建后绑定的速度慢,绑定后调用
onClick()
的速度慢,或者通过实际显示活动来响应
startActivityAndCollapse()
的速度慢,
onBind
onClick
的调用间隔只有几毫秒。大多数等待都发生在调用
onCreate
之前,这让我感到困惑。这是否可以在多个设备和操作系统版本之间复制?目前,我可以在OnePlus 7 Pro API 27上复制这一点。我可以发誓这也发生在模拟器上几个星期前;要么是我记错了,要么是我不小心把它修好了,因为我一辈子都无法在任何Android版本上复制它。所以这毕竟可能是一个OnePlus问题/@钟书:我最好的猜测是,这是一个特定于制造商的问题,他们以干扰第三方瓷砖的方式干扰了通知色调的工作方式。