继承Application以实现全局资源共享
原文地址:http://www.cnblogs.com/Dentist/p/Mr_Dentist_.html
每个程序运行时会创建一个Application类的对象且仅有一个。在app结束时这个Application才会消失。所以可以利用Application来进行一些数据的处理和储存。在多个activity或fragment之间交换数据比如一个app的设置,主题,用户信息等等。用它来实现全局变量比static更便于数据的集中管理。
例如:
public class MyApp extends Application { private Person person; private String corpsname; private List<Person> corpsmember; public void setPerson(Person person){ this.person=person; } public Person getPerson(){ return person; } public void setCorps(String corps){ this.corpsname=corps; } public String getCorps(){ return corpsname; } public List<Person> getcorpsmember(){ return corpsmember; } public void setcorpsmember(List<Person> corpsmember){ this.corpsmember=corpsmember; } }
自建一个类继承Application类。然后在AndroidManifest.xml文件中修改android:name属性为 所在包名+类名
<application android:name="com.example.MyApp.MyApp" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
然后就可以在各个地方与MyApp交换数据了
MyApp mapp=(MyApp)getApplication();
String corps=mapp.getCorps();
平时的使用一般在一个Activity一开始就获取Application。供整个Activity使用。很方便。
public MyApp mapp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.person); mapp=(MyApp)getApplication(); }
在其他类里,比如adapter里要获取Application就要用下面的
MyApp myapp=(MyApp)context.getApplicationContext();
但注意最好不要将持有对Activity引用的对象传进来。这样这个activity结束后也不会被GC回收,造成内存泄漏。
对于Application类的用途很广。下面的例子就展示了当activity较多时,对activity管理的方便。
public class MreApplication extends Application { public static final String TAG="Mre"; /**保存每个activity的状态的存储信息,用于activity新建或返回时自动还原为上次访问时的状态,KEY为各个activity类名**/ private HashMap<String, HashMap<String, Object>> activityState; /**记录activity的栈,保存的是activity类名**/ private Stack<String> activityStack; public HashMap<String, HashMap<String, Object>> getActivityState() { return activityState; } public void setActivityState(HashMap<String, HashMap<String, Object>> activityState) { this.activityState = activityState; } public Stack<String> getActivityStack() { return activityStack; } public void setActivityStack(Stack<String> activityStack) { this.activityStack = activityStack; } /** * 删除栈中最后一个activity */ public void popActivity() { String activity = activityStack.lastElement(); if (activity != null) { activityStack.remove(activity); activity = null; } } /** * 删除栈中指定activity */ public void popActivity(String activity) { if (activity != null) { activityStack.remove(activity); activity = null; } } /** * 取当前activity */ public String currentActivity() { if (activityStack == null) { return null; } String activity = activityStack.lastElement(); return activity; } /** * 加入activity */ public void pushActivity(String activity) { if (activityStack == null) { activityStack = new Stack<String>(); } activityStack.add(activity); } }