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就讲到这里。