我需要在應用部件中使用Observer
來訂閱數據庫更改。該文件說明這種設置的正確位置是onEnabled()
,在AppWidgetProvider
。但是,僅在添加新小部件時纔會調用onEnabled()
。如果應用程序啓動並且小部件已經存在,它不會被調用,並且小部件中的數據不會更新。我應該在應用程序啓動時發送ACTION_APPWIDGET_ENABLED
廣播還是有另一種方式做到這一點?如何在應用程序啓動時初始化已添加的應用程序小部件?
0
A
回答
1
我需要在應用程序小部件中使用Observer來訂閱數據庫更改。
這是不可能的,除非你要運行永久服務,這不是一個好的設計模式。
如果這是您自己的數據庫,那麼當您更改數據庫內容時,只需使用AppWidgetManager
將更新推送到您的應用小部件。
0
儘管CommonsWare在上面的回答中正確,但保留應用程序窗口小部件的靜態觀察者的方法存在缺陷,爲了解決已實現的問題,我在應用程序啓動時發送了ACTION_APPWIDGET_ENABLED廣播。不是一個很乾淨的方式,但它的工作原理。
相關問題
- 1. 在應用程序池啓動時初始化ASP.NET Web應用程序
- 2. 在啓動應用程序時初始化昂貴的對象
- 3. 從我的應用程序添加應用程序小部件
- 4. 應用程序初始化
- 5. Tomcat Java Servlet - 在應用程序啓動時初始化類
- 6. 在啓動時初始化Java EE應用程序緩存
- 7. IBM Worklight - 應用程序服務器啓動時的初始化
- 8. 如何當應用程序初始化
- 9. 從應用程序添加小部件
- 10. 如何在應用程序內部啓動應用程序
- 11. 當應用程序啓動時初始化庫項目
- 12. 何時初始化靜態類?需要從應用程序對象調用的時候,應用程序啓動
- 13. 在web應用程序初始化的Spring bean啓動
- 14. 在啓動時自動啓動後最小化應用程序
- 15. 啓動應用程序時啓動屏幕時應用程序已停止
- 16. 在應用程序啓動時設置對象的初始化順序
- 17. 在應用程序啓動時啓動應用程序類
- 18. Android ContentProvider初始化不在應用程序啓動
- 19. Django應用程序初始化過程
- 20. 應用程序啓動後應用程序大小增加
- 21. c#通過程序在啓動時添加應用程序
- 22. 在應用程序啓動/初始化之前在flex中加載xml文件
- 23. 在android應用程序安裝上啓動應用程序小部件
- 24. 在初始啓動時,Android應用程序的彈出窗口
- 25. iPad:在應用程序啓動時啓動外部應用程序
- 26. 如何在每次啓動應用程序時加載初始視圖?
- 27. 如何在Windows啓動時優化WPF應用程序啓動
- 28. 如何在應用程序啓動時
- 29. 應用程序的一次初始化
- 30. JAX-RS應用程序的初始化
爲什麼這是不可能的?這在使用RemoteViewsService的API 14,15的WeatherListWidget示例中完成。 –
@YuliaRogovaya:「爲什麼這是不可能的?」 - 「AppWidgetProvider」不是「服務」。它是一個'BroadcastReceiver'。一個'AppWidgetProvider'的實例將會持續幾毫秒,並且不會做任何超越'onUpdate()'等方法的任何事情,比如註冊一個'Observer'。恕我直言'WeatherListWidget'是一個非常破碎的示例,我將嘗試與Google一起修復。 – CommonsWare
在此示例中,在onEnabled()中註冊了一個靜態觀察者。當在工作線程上調用此觀察者的onChange()時,它會推送RemoteViewsService以更新小部件。問題是,僅在添加小部件時才調用onEnabled()。如果應用程序啓動並且小部件已經存在,則初始化不會通過... –