2011-08-26 37 views
13

我想從任何組件初始化我的應用程序時啓動服務。我可以從Application#onCreate()啓動服務嗎?

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startService(new Intent(getApplicationContext(), MyService.class)); 
    } 
} 

該服務是否可用於onCreate()狀態? super.onCreate()會初始化AndroidManifest.xml中註冊的應用程序的所有組件嗎?

我可以在我的銀河系統中運行此代碼,但無法確定它將在所有設備和平臺上運行,我找不到有關Android應用程序初始化的任何文檔。

+0

在這種情況下我們如何才能將Service對象返回到Application ...以及從何處調用onBind? – aProgrammer

回答

8

是的,您可以按照您的方式啓動onCreate()服務。不能保證服務能夠成功啓動 - 只要服務存在於設備上並且能夠運行,它就會運行。 super.onCreate()不會進行任何準備,以便在您的應用程序內啓動服務。 「在onCreate()狀態下可用的服務」是什麼意思?

+0

該服務來自我的應用程序,因此它肯定存在。通過「服務是否在onCreate()狀態可用」,我的意思是服務是否已準備好在Application#onCreate()(而不是Activity#onCreate())中啓動。 –

+1

服務即將開始。 onCreate不需要在服務可以啓動之前運行(即,onCreate不會從您的應用程序加載服務所需的類加載)。 –

0

總之是的,Context.startService()但文件還說,如果它返回null服務不可用。

如果服務正在啓動或已在運行,則返回已啓動的實際服務的組件名稱 ;否則 如果服務不存在,則返回null

這個API並不意味着設備之間的不同,所以你可以在您遇到的仿真器和設備,你有什麼信心。需要注意的是,需要「大量」資源的服務可能會採取不同的行爲,例如cpu時間或內存等。

相關問題