先定義一個Application
package com.xesam;import android.app.Application;import android.content.res.Configuration;import android.util.Log;public class ApplicationActivity extends Application { static String name = "小西山子"; @Override public void onCreate() { Log.v("ApplicationActivity","onCreate"); super.onCreate(); } @Override public void onTerminate() { Log.v("ApplicationActivity","onTerminate"); super.onTerminate(); } @Override public void onConfigurationChanged(Configuration newConfig) { Log.v("ApplicationActivity","onConfigurationChanged"); super.onConfigurationChanged(newConfig); } @Override public void onLowMemory() { Log.v("ApplicationActivity","onLowMemory"); super.onLowMemory(); }}
主要Activity:
package com.xesam;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.util.Log;import android.view.ViewGroup.LayoutParams;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Log.v("MainActivity","onCreate"); super.onCreate(savedInstanceState); ApplicationActivity app = (ApplicationActivity)this.getApplication(); LinearLayout main = new LinearLayout(this); main.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); main.setOrientation(LinearLayout.VERTICAL); TextView tv = new TextView(this); tv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); tv.setText(app.name); tv.setTextColor(Color.BLUE); main.addView(tv); setContentView(main); } @Override public void onDestroy(){ Log.v("MainActivity","onDestroy"); super.onDestroy(); //System.exit(0); }}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xesam" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="ApplicationActivity"> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
這裡我們自訂了一個Application,所以必須指定AndroidManifest.xml中application的android:name屬性(預設是android.app.Application)。
輸出結果:
"ApplicationActivity","onCreate""MainActivity","onCreate""MainActivity","小西山子""ApplicationActivity","onConfigurationChanged"
退出之後列印結果:
"MainActivity","onDestroy"
從模擬器再次開啟應用(沒有再次編譯)之後,列印結果
"MainActivity","onCreate""MainActivity","小西山子"
所以後退的時候並沒有關閉application,要強制關閉application,可以在MainActivity的onDestroy中調用System.exit(0)
@Override public void onDestroy(){ Log.v("MainActivity","onDestroy"); super.onDestroy(); System.exit(0); }
這樣就完全退出程式了。
回到application的問題上來,顯然,application的onCreate在activity的onCreate之前執行了,所以整個應用的最初入口是這個方法。
onCreate作用說明:
/** * Called when the application is starting, before any other application * objects have been created. Implementations should be as quick as * possible (for example using lazy initialization of state) since the time * spent in this function directly impacts the performance of starting the * first activity, service, or receiver in a process. * If you override this method, be sure to call super.onCreate(). */
可以認為Activity,service以及其他的組件共同構成了一個application的環境,因此application中可以共用或者初始化一些全域變數,比如地圖(百度地圖demo就是這麼做的)。
註:eclipse查看源碼的方法:
下載android版本對應的源碼【2.2版本地址:http://rgruet.free.fr/public/android-2.2-froyo-src.zip】
解壓縮到 /usr/local/android-sdk-linux/platforms/android-8下,然後修改同目錄下source.properties檔案中的Pkg.SourceUrl為剛才解壓的源碼目錄就行了
一個樣本(我下載的源碼放在/usr/local/android-sdk-linux/platforms/android-8/source目錄中,所以Pkg.SourceUrl=sources):
### Android Tool: Source of this archive.#Mon Apr 23 01:14:48 CST 2012Layoutlib.Api=4Layoutlib.Revision=0Pkg.Desc=Android SDK Platform 2.2_r3Archive.Arch=ANYPlatform.Version=2.2Pkg.DescUrl=http\://developer.android.com/sdk/Platform.MinToolsRev=8Archive.Os=ANYPkg.SourceUrl=sourcesPkg.Revision=3AndroidVersion.ApiLevel=8
轉載請註明來自小西山子【http://www.cnblogs.com/xesam/】
本文地址:http://www.cnblogs.com/xesam/archive/2012/05/18/2507143.html