框架:关闭多个activity的方案之一(用list记录create过的activity)

4 篇文章 0 订阅
3 篇文章 0 订阅

步骤一:搞Application类的成员变量作为list,记录开过的activity

public class MyApplication extends Application{

 

//运用list来保存们每一个activity是关键  

    private List mList = new LinkedList();  

    //为了实现每次使用该类时不创建新的对象而创建的静态对象  

   

    // add Activity    

    public void addActivity(Activity activity) {   

        mList.add(activity);   

    }

    public void removeActivity(Activity activity) {   

        mList.remove(activity);   

    } 

    

    //关闭每一个list内的activity  

    public void exit() {   

        try {   

            for (Activity activity:mList) {   

                if (activity != null)   

                    activity.finish();   

            }   

        } catch (Exception e) {   

            e.printStackTrace();   

        } 

//        finally {   

//            System.exit(0);   

//        }   //这个不用也没关系,不过具体没经测试人员搞过,不清楚

    }   

    //杀进程  

    public void onLowMemory() {   

        super.onLowMemory();       

        System.gc();   

    }    

 

}

Application使用的细节:

1)网上找的例子,会对Application单例化,以保证list的唯一(丫的我照着单例还报错了),其实没必要,Application类是个特别的类,该类下的变量本来就是可以给该应用下的所有activity用作全局变量的;app创建后,系统就会实例化出一个唯一的Application对象,犯不着自己还搞一个单例化模式去搞Application实例。

2)注意在清单里注册,补充name属性

 

步骤二:每个activity的onCreate()里

加一句:((MyApplication) getApplication()).addActivity(this);

此外,在onDestroy()里,加一句:((MyApplication) getApplication()).removeActivity(this);

 

下一步,笔者试试写基类,把这两行代码深入activity心

 

步骤三:baseActivity

假如每个activity都要写上面两行代码,那是不科学的

public class BaseActivity extends Activity {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

((MyApplication) getApplication()).addActivity(this);

 

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

((MyApplication) getApplication()).removeActivity(this);

}

 

}

 

只需要写上面的baseActivity,然后继承它就好了

 

关于baseActivity里的this,下面补充java知识:

要说super就先要说this。
"this",作为一个特殊的关键字,它的规则如下:
1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。
2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有静态类型,就是这个类C本身;它有动态类型,就是当前这个对象的类型。你可以对它调用成员函数,把它传递给别的函数,等等等等。只要一个C类型的final变量可以出现的地方,它就可以出现。

"super"。它和"this"类似,但是也有不同的地方。
1。表示调用父类的构造函数。也是一个特殊语法,不是变量,没有什么类型。

2。可以在一个类的非static成员内部使用。比如super.method()。
但是,注意,这个super.method()只是长得跟some_var.method()一样,一个语法糖而已。实质上,"super"根本不是一个变量。

为什么不是?因为如果是就坏了。java里面有一个金科玉律:任何public非static函数的调用都是多态的。
所以,如果super是个变量,也指向当前对象,那么,不管super的静态类型是什么super.method()必然调用的是子类的那个版本,而不会是我们期望的,静态地选择父类的那个版本。

所以,你只要把super.xxx看成一个特殊的语法,比如理解为“super::xxx”就好了。

既然super不是一个变量,那么不能把它象一个普通变量那样"==",或者传递给某个函数就看起来很正常了,是么?何况,你其实也用不着它,有this你这些要求就都可以办到了。

3。super的另外一个作用是调用父类的protected函数。只有通过"super"这个魔咒,我们才能操作父类的protected成员,别无它法。

 

总结:this代表的是当前对象,子activity继承了baseactivity,那么执行super.oncreate()的那个this就是这个子activity了;要理解这句简单的话,其实就是要明白,super.xx()里的这个super绝对不是父类的对象的意思。你就当成一个标志来理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值