单例模式Activity管理的使用,以及volatile的作用

来源:互联网 发布:佛山网络推广shundeit 编辑:程序博客网 时间:2024/06/06 14:14

我现在也是开始边学习边谢谢博客记录知识的点滴,好记性不如烂笔头,我觉得记录下来有利于加强我的记忆。

1、volatile修饰的变量,有原子级的特征 例如 a=b+c; 此时a 算是原子级的,如果是a=a+1,则此时的volatile修饰的变量是无效的。

     在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中
保持要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,
或者main memory中的值不一致的情况。
来源:http://blog.csdn.net/orzorz/article/details/4319055
//这个是activity管理类,在baseActivity中进行管理,可方便操作public class ActivityManager {    //volatile 修饰只能是主内存存在,其他线程访问的临时变量也都跟这个一样    private static volatile ActivityManager instance;//java中stack的使用方法,堆栈是一种"后进先出"(LIFO)的数据结构,只能在一端进行插入(称为"压栈")或删除(称为"出栈")数据的操作.    private Stack<Activity> mActivityStack = new Stack<Activity>();    private ActivityManager() {    }    public static ActivityManager getInstance() {        if (instance == null) {            synchronized (ActivityManager.class) {                if (instance == null) {                    instance = new ActivityManager();                }            }        }        return instance;    }    public void addActicity(Activity act) {        mActivityStack.push(act);    }    public void removeActivity(Activity act) {        mActivityStack.remove(act);    }    public void killMyProcess() {        int nCount = mActivityStack.size();        for (int i = nCount - 1; i >= 0; i--) {            Activity activity = mActivityStack.get(i);            activity.finish();        }        mActivityStack.clear();        android.os.Process.killProcess(android.os.Process.myPid());    }}