application類的使用
1.Application類
Application和activity、service等四大組件一樣Android的組件。最開始學習Java
的
是,我們都是通過main方法進入程序的,但是Android的真正入口在哪裏?
初學者可能認爲Android的入口不就是activity中onCreate的方法嗎,我最開始也是
這麼認爲的,那個時候我還不知道有application這個類,只知道在manfestandroid.xml
文件中定義一個application標籤,在裏面在寫Android的四大組件,組件中還可以添加
action,category等屬性值。但是不理解application到底有什麼用,現在工作半年了,
對Android的一些知識點理解也不同,那麼application到底有什麼用了?
其實application纔是Android的真正入口,在application中有一個方法oncreate,
這個方法在啓動APP的時候就會被調用。我們如何寫一個自己的application了?首先寫
一個類MyApplication繼承Application,然後重寫onCreate等,最後在
manfestandroid.xml的Application標籤中添加屬性
andorid:name="com.simple.fan.MyApplication",這個屬性的值是自定義Application
的詳細路徑,寫到這裏我們自定義的MyApplication的就寫完了,並且這個類還是全局單
例的類。
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.simple.fan.MainActivity">
<intent-filter >
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
2.application類的關係
java.lang.Object
android.content.Content
android.content.ContentWrapper
android.app.Application
android.app.Application中的四個方法
onConfigurationChanged(Configuration newConfig)
onCreate() :android的真正入口
onLowMemory()
onTerminate():APP真正退出時條用的方法
3.application的用法
在application中定義的變量是全局的,應用程序不退出,這邊變量就會清除,一直存在堆棧中,在application中存放的數據一般都是全局的變量,這樣可以起到共享數據的作用,前不久做了一個項目,在一個activity中會通過網絡操作,獲取到數據,保存在內存中,當退出這個activity時,內存中的數據就會被GC回收掉,當再次進入activity時,又需要網絡操作,網絡操作會耗時,這時界面會沒有什麼數據,很影響用戶的體驗,但是,當我們上次進入這個activity時,就把數據緩存到application中,下次在進入時,先從application中取數據,顯示出來,之後,我們在開個線程在後臺偷偷的去下載最新數據,下載完成後再把全新的數據刷到UI界面上去。
Appliccation類
<span style="font-size:14px;">public class GlobalApplication extends Application {
public Map<String, Object> mMap = new HashMap<String, Object>();
@Override
public void onCreate() {
super.onCreate();
mMap.put("fan", "my name is fan");
Log.i("fan", "onCreate");
}
@Override
public void onTerminate() {
super.onTerminate();
Log.i("fan", "onTerminate");
}
}</span>
Activity類
<span style="font-size:18px;">public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
Log.i("fan", ((GlobalApplication)getApplication()).mMap.get("fan").toString());
}
}</span>
在activity中獲取application的方法爲getApplication()或者通過Content.getApplicationContent方法獲取Application,另外通過Application也可以獲取到一些關於APP的一些信息,例如一些包名和APP的信息。
好了,Application就講到這裏。