【发布时间】:2019-07-09 20:49:23
【问题描述】:
我使用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>
就目前而言,这是可行的。但是,当我的应用程序停止时,下次我尝试通过快速设置面板打开它时,启动 Activity 需要 几秒钟。
这是我所知道的:
Activity 本身启动并不慢。尝试通过启动器打开它会很清楚。
Service 似乎需要一段时间才能在 onClick 执行之前开始。这说得通;在应用程序未运行时,Service 可能不会一直在后台运行。然而,这意味着当系统检测到点击我的Tile 时,必须首先重新创建Service,这需要很长时间。
如果我的猜测是正确的,我不知道该去哪里。
编辑:作为一个重要的补充,我可以在运行 Android Pie 的 OnePlus 7 Pro 上重现这一点。这可能是 OnePlus 特有的问题,因为我无法在模拟器上重现它。
【问题讨论】:
-
如果您还没有这样做,请覆盖
QuickAccessTileService中的onCreate()和onBind(),链接到超类并记录它们被调用的时间。还要记录调用onClick()的时间。这有望为您提供一些线索,了解该过程的哪个步骤是缓慢的:创建服务缓慢,创建后绑定缓慢,绑定后调用onClick()缓慢,或响应您的startActivityAndCollapse()缓慢实际显示活动。 -
同意。这是否可以跨多个设备和操作系统版本重现?
-
目前,我可以在 OnePlus 7 Pro API 27 上重现这一点。我可以发誓这也发生在几周前的模拟器上;要么我记错了,要么我不小心把它修好了,因为我一辈子都无法在任何 Android 版本上复制它。所以这毕竟可能是一个 OnePlus 问题。 ://
-
@CommonsWare,我可以在华为API 26上重现这个,不仅onClick,onStartListening延迟,甚至根本不执行。
-
@zhongshu:我最好的猜测是这是一个特定于制造商的问题,他们弄乱了通知栏的工作方式,干扰了第三方磁贴。
标签: android android-service android-app-quick-setting