我正在创建一个Android小部件,它是一个按钮。
单击它时,窗口小部件会在共享首选项中更改服务和服务写入更改,然后窗口小部件应调用更新方法以根据服务中更改的首选项值更改背景。
问题是更新方法在服务之前运行,因此小部件会在服务更改之前更新存储在共享首选项中的最后一个值。
我想要什么: - 单击小部件按钮 - OnReceive方法 - 调用startService() - 服务正在运行 - 在服务中:编辑共享参考 - 服务结束 - 根据编辑的共享首选项的值调用更新小部件
真正起作用的是: - 单击小部件按钮 - OnRecieved方法 - 调用startService() - 根据编辑的共享首选项的值调用更新小部件和更新(但尚未编辑) - 服务正在运行 - 在服务中:编辑共享参考 - 服务结束
我的代码: - OnReceive() - 在OnReceive()中: --- startService(); --- updateWidgets();
如何在更新方法开始运行之前完全运行服务????
答案 0 :(得分:0)
startService()不是阻塞操作,因此如果在onReceive()上依次有startService()和updateWidgets(),它将不会等待服务开始和结束以运行updateWidgets()。
要拥有您想要的方式,您需要在服务startCommand()的末尾调用updateWidgets(),并调用finish()来结束服务。