Android TileService onStartListening 没有立即调用?

Nat*_* F. 7 android android-app-quick-setting

Android TileService文档声明如下:

磁贴何时应该是最新的并且列表将由 onStartListening() 和 onStopListening() 指示。

根据 TileService 的生命周期,您应该在onStartListening()调用时开始更新图块状态。

问题是,当图块进入用户视图时,似乎并没有立即调用此回调。这意味着在视图正确更新之前,它有时可能会显示过时的信息几秒钟。

例如,服务已连接,磁贴将其显示为已连接。然后,我切换到应用程序,关闭服务,然后重新打开“快速设置”视图。它仍然显示该服务已连接很长时间。

理论上,磁贴进入视图的那一刻,它应该已使用新数据进行更新并将其显示为未连接。

我通过简单地添加一条日志消息作为视图中的第一个条目来确认这种情况。当我将图块带入用户视图时,该日志消息在 4-5 秒的时间内不会写入 log cat。

发生什么了?我错过了什么吗?

我的代码

@Override
public void onStartListening() {
    android.util.Log.d("Test", "onStartListening called");
    updateTileDisplay();
    registerDelegate();
}
Run Code Online (Sandbox Code Playgroud)

updateTileDisplay();功能正在更新图块的标题、状态和图标。一旦完成,它就会按tile.updateTile();应有的方式进行调用。此外,该registerDelegate();函数正在注册一个委托,该委托将侦听内部状态更改并相应地更新图块。onStopListening()该委托稍后在被调用时被删除。

onStartListening called直到我将图块放入视图后 5 秒以上,我才看到该日志消息。这似乎与 TileService 文档不一致。