关于android的Application

来源:互联网 发布:java sleep 释放锁 编辑:程序博客网 时间:2024/06/06 01:13

1.Application类,继承自ContextWrapper上下文包装类

每个应用启动都会自动创建且创建一次Application对象,一般为默认的Application,也可以继承Application自定义自己的Applicaton。只需要继承appliction重写onCreate方法并且在AndroidManifest.xml文件中注册即可。需要注意的是Application是单例模式的,如果其中引用Context对象是类似aActivity.this,就会导致,如果应用未结束,而aActivity已经结束,就会出现aActivity引用被应用所持有,aActivity不会被回收的情况发生,就发生了内存的泄露。

虽然可以继承Application,用于定义应用级变量共享,或者应用级别的一些处理操作,但是绝大多数情况都是不需要这样做的,因为绝大多数情况可以自定义单例静态类实现,单例静态类中如果需要使用应用程序全局上下文可以使用Context.getApplicationContext();

2.关于getApplication()、getApplicationContext、getBaseContext()、this

getApplication() is only available on the Activity class and in the Service class, whereas 

getApplicationContext() is declared in the Context class.

二者都是去获取全局Application上下文,只是使用的范围不同,

when writing code in a broadcast receiver, which is not a context but is given a context in its onReceive method, you can only call getApplicationContext(). Which also means that you are not guaranteed to have access to your application in a BroadcastReceiver.

我理解为,如果当前上下文不是Activity、不是Service,而是广播接收器,则只能使用getApplicationContext()方法获取全局应用对象了。而此时并不能保证能够获取成功。我理解为可能是由于应用没有启动?

getBaseContext()就是获取构造方法中的Context参数

this代表当前对象,不一定就是当前Activity,在设置监听等处理中是代表组件本身


http://stackoverflow.com/questions/5018545/getapplication-vs-getapplicationcontext,大神的原回答


0 0
原创粉丝点击