0

我希望能夠重新啓動我的WatchFaceSerivce在這樣我就可以再次觸發onCreateEngine()方法,並設置一個備用牆紙。重新啓動的Android服務

然而,Android的服務我試圖重新啓動是把一個真正的戰鬥,它幾乎好像代碼有,雖然我已經確定它獲取調用沒有影響。

stopService(new Intent(getApplicationContext(), MyWatchfaceService.class)); 
startService(new Intent(getApplicationContext(), MyWatchfaceService.class)); 

有沒有一種方法,我可以強制重新啓動我在Android的服務觸發onCreateEngine還是第一次在服務啓動後的發動機設置爲備用表的臉?

回答

1

壁紙由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); 
     } 
    } 

所以你將所有繪圖邏輯推遲到每個抽屜,讓他們獨立完成工作。

至於加載一些資源,你的抽屜必須有一定的生命週期。所以,他們需要自己的回調像onCreateonDestroy。當您設置一個新的抽屜裏,你可以調用它的onCreate,它會在圖像,當它消失了,你叫onDestroy,所以它可以清理後本身。所以,現在你的抽屜裏應該有接口這樣的:

public interface WatchFaceDrawer { 
    void onCreate(); 
    void onDestroy(); 
    void draw(Canvas canvas, Rect bounds); 
} 

你可能需要增加更多的來處理其他事件。

+0

的的onDraw()方法是唯一的引擎類,但是,怎麼會在抽屜進來,覆蓋最新的發動機的OnDraw提供()?另外,onCreate()方法會加載一些靜態圖像 - 抽屜是否也會負責在每次調用時加載靜態圖像?如果你能指點我一個例子,我會非常感激! – rmoh21

+0

請檢查我的編輯。 – gruszczy

+0

感謝這有助於! – rmoh21