首页>>移动互联网>>Android Application存储全局变量
Android Application存储全局变量
来源: 时间: 2015-02-10 20:11:00

android有一种机制, 在内存不足的前提下优先考虑杀死在后台的Activity(生命周期处于onStop的), 然而这个Activity里面有一些与用户交互的或者是其他的一些数据还未保存.?

怎么办呢?

1:你可以重写Activity的onSaveInstanceState和onRestoreInstanceState方法, 在onSaveInstanceState方法中保存需要的一些数据,onRestoreInstanceState再把这些数据拿过来

2:我们可以在Activity的onStop方法里面把这些值存在全局变量里面

Android提供了一个类似于ServletContext的全局变量, 叫Application.  我们可以利用它存储一些全局变量!

那么有人会问了, 内存不足不是你的东西会被系统杀掉吗?

大家请明白一点, 因为内存不足杀掉Activity/Service等一些组件,那也只是杀掉一些线程而已.! 我们这里的Application就是你的进程, 每个应用在android的Linux系统中

都会是一个单独的进程,   除非是出了异常或者手动被杀掉, 不然一旦应用程序运行之后,进程是不会被杀的.

也就是说, Android只是杀掉某个或者某几个Activity, 或者是直接把某个Task给结束掉而已, 所以我们可以放心大胆的把某些全局变量存在Application里面.

而且Application生命周期方法里面还有个onTerminate方法, 当被终止的时候我们还可以把这些全局变量存起来, 下回onCreate的时候再恢复.

这里我推荐大家在用Appcation存值得时候在Application里面写一个Map就好了, 因为变量太多得话会显得那个类很臃肿.

下面给出示例:

import java.util.Collections;

import java.util.HashMap;

import java.util.Map;

import android.app.Application;

public class MyApplication extends Application {

    private Map<String, Object> mData;

    public Map<String, Object> getmData() {

        return mData;

    }

    @Override

    public void onCreate() {

        super.onCreate();

        mData = new HashMap<String, Object>();

        //synchronized the map

        mData = Collections.synchronizedMap(mData);

        // then restore your map

    }

    public void onTerminate() {

        super.onTerminate();

        //save data of the map

    }

}

然后在AndroidManifest里面配置<application>节点的属性

<application android:name=".MyApplication">

.....

最后, 写个测试的Activity, 调用getApplication方法, 就欧了

本页地址:http://www.easytd.com/yidonghulianwang/d_15021020268.html

上一篇:Android修改Toast消息提示框字体大小 下一篇:Android获取view在屏幕中的位置