我正在構建一個應用程序,它將定期監視電池狀態,wifi連接和位置數據,並將結果寫入文件(並稍後將它們發送到服務器)。應該禁用安裝應用程序監視 - 但啓用它的用戶應該在重新啓動後繼續。大量的閱讀後,我已經意識到我已經基本2個選擇:Android設計:背景長時間運行服務或AlarmManager?
- 子類
Service
和我的活動火它關閉。將它設置在前景,STICKY和什麼不是,並希望它不會被android殺死 - 並注意如果android重新創建它(實際上應該有3個服務,因此它們之間的同步可能會混亂)。在服務中啓動一個線程(無需執行程序,我猜),並有Thread.sleep(REGULAR_INTERVAL)
。喚醒,收集數據寫入文件。廣播收集到的信息並將其顯示在我的活動中(如果它恰好在運行)(它將註冊一個廣播接收器)。沖洗並重復while(true)
。有辦法打斷這個 - 我的活動有註冊一個PendingIntent與AlarmManager - 這將運行每個REGULAR_INTERVAL。我還沒有深入研究過這種方法的技術細節 - 但我希望我能夠讓這個PendingIntent創建並運行一個IntentService(這似乎是一條可行的路線 - 讓Thread機制免費以及關閉在其自己的)。這種方法的一些骨架代碼將受到歡迎。
我想我必須註冊在這兩種情況下啓動接收器檢查共享偏好(已經做到了這一點),並在情況1啓動服務(S),而在情況2寄存器的報警事件的接收器並設置警報管理器 - 這是我需要一些骨架代碼的部分。
所以 - 在我開始構建之前 - 這將是首選方法?
在回顧 - 應用程序應該監視一些手機屬性,並將它們寫入文件,直到用戶選擇關閉它。
你的用戶或許會殺了你,如果你保持一個'Service'活着連續排水他們的手機電池只是聚集在一定的時間間隔圓頂數據。如果需要,可以使用第二種方法,帶有帶額外WakeLocks的'IntentService'(查看CommonsWare的'WakefullIntentService')。 – Luksprog 2013-03-16 16:06:12
@Luksprog:謝謝 - 我需要鎖嗎?在接收報警的廣播接收機中(仍在研究如何實現)? – 2013-03-16 16:10:44
爲什麼是反面投票? – 2013-03-16 21:11:18