壁紙由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);
}
你可能需要增加更多的來處理其他事件。
的的onDraw()方法是唯一的引擎類,但是,怎麼會在抽屜進來,覆蓋最新的發動機的OnDraw提供()?另外,onCreate()方法會加載一些靜態圖像 - 抽屜是否也會負責在每次調用時加載靜態圖像?如果你能指點我一個例子,我會非常感激! – rmoh21
請檢查我的編輯。 – gruszczy
感謝這有助於! – rmoh21