每天進步一點點之Android基礎(2)——Android Application的使用及其生命週期

1. Application的使用

多個組件之間數據共享

舉例:兩個Activity之間數據共享

Application 對同一個應用程序是唯一的,所以可以使用Application進行數據共享

定義兩個Activity:  MainActivity.java 和 MainActivity2.java, 代碼是一樣的

TextView tv;
EditText et;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main_activity2);
    setContentView(R.layout.activity_main2);

    tv = (TextView) findViewById(R.id.tv);
    et = (EditText) findViewById(R.id.et);
    
    tv.setText("共享數據:" + getApp().getTextData());
    
    findViewById(R.id.btnTextData).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            getApp().setTextData(et.getText().toString());
            tv.setText("共享數據:" + et.getText().toString());
        }
    });
}

public App getApp() {
    return ((App)getApplicationContext());
}

定義一個類App,集成Application

public class App extends Application {
    
    private String textData = "default";
    
    public void setTextData(String textData) {
        this.textData = textData;
    }
    public String getTextData() {
        return textData;
    }
}

修改AndroidManifest.xml文件, 使用自定義的Application,兩個Activity都是入口:

<application
    android:name="com.carloz.learnapplication.App"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <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>
    <activity
        android:name="com.carloz.learnapplication.MainActivity2"
        android:label="@string/title_activity_main_activity2" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

結果,在一個Activity修改App的數據,在另一個Activity都能獲取到

2. Application的生命週期

給應用程序配置,自定義的Application,然後在Application的生命週期中做一些操作

public class App extends Application {

    @Override
    public void onCreate() {
        // 程序創建的時候執行
        Log.d(TAG, "onCreate");
        super.onCreate();
    }
    @Override
    public void onTerminate() {
        // 程序終止的時候執行
        Log.d(TAG, "onTerminate");
        super.onTerminate();
    }
    @Override
    public void onLowMemory() {
        // 低內存的時候執行
        Log.d(TAG, "onLowMemory");
        super.onLowMemory();
    }
    @Override
    public void onTrimMemory(int level) {
        // 程序在內存清理的時候執行
        Log.d(TAG, "onTrimMemory");
        super.onTrimMemory(level);
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        Log.d(TAG, "onConfigurationChanged");
        super.onConfigurationChanged(newConfig);
    }
    
}
打開Activity
08-16 15:16:27.142: D/CARLOZ - Application(28202): onCreate
08-16 15:16:27.172: D/CARLOZ - MainActivity3(28202): onCreate
08-16 15:16:27.232: D/CARLOZ - MainActivity3(28202): onStart
08-16 15:16:27.232: D/CARLOZ - MainActivity3(28202): onResume
HOME鍵退出應用程序
08-16 15:16:55.372: D/CARLOZ - MainActivity3(28202): onPause
08-16 15:16:55.942: D/CARLOZ - MainActivity3(28202): onStop
08-16 15:16:55.952: D/CARLOZ - Application(28202): onTrimMemory    回收內存
重新打開應用程序
08-16 15:17:20.962: D/CARLOZ - MainActivity3(28202): onRestart
08-16 15:17:20.962: D/CARLOZ - MainActivity3(28202): onStart
08-16 15:17:20.962: D/CARLOZ - MainActivity3(28202): onResume
長按MENU鍵,打開Recent TASK
08-16 15:17:28.972: D/CARLOZ - MainActivity3(28202): onPause
08-16 15:17:28.992: D/CARLOZ - MainActivity3(28202): onStop
08-16 15:17:29.022: D/CARLOZ - Application(28202): onTrimMemory
徹底關閉應用程序
08-16 15:17:31.542: D/CARLOZ - MainActivity3(28202): onDestroy

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章