[英]Restarting Android service
我希望能夠重新啟動WatchFaceSerivce,以便可以再次觸發onCreateEngine()方法並設置備用牆紙。
但是,我嘗試重新啟動的Android服務正在引起一場激烈的戰斗,盡管我已確保調用了該代碼,但似乎該代碼似乎無效。
stopService(new Intent(getApplicationContext(), MyWatchfaceService.class));
startService(new Intent(getApplicationContext(), MyWatchfaceService.class));
有沒有一種方法可以在第一次啟動服務后強制重啟Android服務以觸發onCreateEngine或將Engine設置為備用表盤?
牆紙由WallpaperManager管理,該WallpaperManager
大多數具有僅適用於系統應用程序的方法。 這是WallpaperManager
,它將啟動和停止您的服務。
我對您的建議是對體系結構進行一些更改。 您只需要一個WatchFaceService
子類和Engine
子類,而無需重新啟動它們。 相反,在Engine
內部,您應該有多個表盤抽屜。 所以你的結構是這樣的:
WatchFaceService
Engine
AnalogWatchFaceDrawer
DigitalWatchFaceDrawer
FancyWatchFaceDrawer
FitnessWatchFaceDrawer
WeatherWatchFaceDrawer
不,如果要更改繪制的表盤面,則只需更改當前抽屜並強制立即重繪即可。
編輯:對於繪圖,您要做的就是將畫布和邊界傳遞到當前抽屜,並讓它完成工作,因此您的代碼將如下所示:
@Override
public void onDraw(Canvas canvas, Rect bounds) {
if (mCurrentWatchFaceDrawer != null) {
mCurrentWatchFaceDrawer.draw(canvas, bounds);
}
}
因此,您可以將所有繪圖邏輯都交給每個抽屜,讓它們獨立完成工作。
至於加載一些資源,您的抽屜必須具有一定的生命周期。 因此,他們需要自己的回調,例如onCreate
和onDestroy
。 設置新抽屜時,將其調用onCreate
,它將顯示圖像,當抽屜消失時,將調用onDestroy
,以便可以對其進行清理。 因此,您的抽屜現在應該具有如下界面:
public interface WatchFaceDrawer {
void onCreate();
void onDestroy();
void draw(Canvas canvas, Rect bounds);
}
您可能需要添加更多內容來處理其他事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.