【記錄】Android中的Application

來源:互聯網
上載者:User

 

先定義一個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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.