2011-10-07 87 views
43

在我的Android應用程序中,我有一個​​類,它擴展android.app.Application,並在其onCreate()中綁定了一些服務,我的其他活動將在此應用程序中使用這些服務。何時調用Application的onCreate()方法?

另外我有一個BroadcastReceiver它偵聽並接收C2DM消息。當應用程序未運行時,此接收器接收到消息時,它將激活一個顯示即將發生的消息的對話框,它將啓動我的應用程序的「活動」。

我的問題是,當我開始一個沒有任何與​​互動的活動時,我的​​的onCreate()會被調用,因爲該應用程序的一個Activity已經啓動?

這裏是我的​​的定義和清單:

public class DefaultApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     doBindService(); 

    } 

    void doBindService() { 

     // Establish a connection with the service. We use an explicit 
     // class name because we want a specific service implementation that 
     // we know will be running in our own process (and thus won't be 
     // supporting component replacement by other applications). 

     bindService(new Intent(DefaultApplication.this, SocketService.class), 
       socketServiceConnection, Context.BIND_AUTO_CREATE); 

     mIsBound = true; 
    } 

    void doUnbindService() { 
     if (mIsBound) { 
      // Detach our existing connection. 
      unbindService(socketServiceConnection); 
      mIsBound = false; 
     } 
    } 
} 

清單如下:

<application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:name="com.mypackage.DefaultApplication" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
     android:debuggable="true"> 
<service android:name="com.mypackage.services.SocketService"></service> 
<activity android:name="TestActivity" 
      android:screenOrientation="landscape"></activity> 
</application> 
+1

是的,它的工作原理是,我還沒有看到其他別的... – atasoyh

+0

我不unserstand爲什麼要擴展'Application'?你不應該延長'活動'嗎? – Caner

+0

@LAS_VEGAS在我的其餘部分DefaultApplication中,我存儲了一些數據並定義了一些在應用範圍內使用的方法。我只把它的一部分複製到這裏。 –

回答

40

只有第一次。

當活動啓動並且未加載應用程序時,將調用兩個onCreate()方法。

但是對於後續的活動開始,應用程序的onCreate()將不會被調用。

+0

不完全正確。 [Paul的答案解釋了更多,包括一個有用的鏈接。](http://stackoverflow.com/a/28498115/383414) –

28

你可以找到一個正式答覆時onCreate被稱爲here

當應用程序開始時調用,任何活動,服務,或 接收器對象(不包括內容提供者)已被創建之前。 實現應該儘可能快(例如使用狀態初始化的延遲 ),因爲在此函數中花費的時間直接影響啓動第一個活動, 服務或進程中的接收方的性能。如果你重寫這個方法,一定要調用super.onCreate(),否則爲 。

相關問題