Bap*_*ier 5 android android-service android-app-quick-setting
我使用 aTileService作为快捷方式来打开我的应用程序的Activity. 它只做那个,没有状态。
它看起来像这样:
class QuickAccessTileService : TileService() {
override fun onClick() {
super.onClick()
val intent = Intent(this, SlideOverActivity::class.java)
.addFlags(FLAG_ACTIVITY_NEW_TASK)
startActivityAndCollapse(intent)
}
}
Run Code Online (Sandbox Code Playgroud)
它声明AndroidManifest为:
class QuickAccessTileService : TileService() {
override fun onClick() {
super.onClick()
val intent = Intent(this, SlideOverActivity::class.java)
.addFlags(FLAG_ACTIVITY_NEW_TASK)
startActivityAndCollapse(intent)
}
}
Run Code Online (Sandbox Code Playgroud)
就目前而言,这是有效的。但是,当我的应用程序停止时,下次我尝试通过快速设置面板打开它时,需要几秒钟才能启动该活动。
这是我所知道的:
Activity 本身启动起来并不慢。尝试通过启动器打开它会很清楚。
本Service似乎是什么服用一段时间才能开始之前,onClick甚至执行。这说得通; Service当应用程序没有运行时,它可能不会在后台运行。然而,这意味着,当系统检测到我的点击Tile,将Service首先必须重建,这需要的时间太长了。
我不知道从哪里开始——如果我的猜测是对的。
编辑:作为一个重要的补充,我可以在运行 Android Pie 的 OnePlus 7 Pro 上重现这一点。这可能是 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()
}
}
Run Code Online (Sandbox Code Playgroud)
舱单
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |