首页 > 代码库 > 继承Application以实现全局资源共享

继承Application以实现全局资源共享

每个程序运行时会创建一个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();
        
    }

 

但注意不要将持有对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);
    }
}