Android Activity 和 上下文Context 的关系
SoundPool这个方法所处的类是一个独立的类,因为我想在一个Singleton模式下的类里创建这个Sound类 然后播放按照顺序播放声音.所以暂时和我的程序主体还没挂钩.
主要问题是我不理解 上下文 到底是什么,和Activity到底有什么关系? 是不是存在onCreate的类就是这个程序的Context?
为什么在一些View 类里可以使用getContxnt(), 在独立的类里不行?
在这个Sound里用(AudioManager)getContext() 为什么也会报错?
如果我传入了我的程序入口类(也就是onCreate所在的类)
(AudioManager)this.activity
这样写对不对呢? 展开
首先看继承关系:
可以看到Activity继承于ContextThemeWrapper,ContextThemeWrapper继承于ContextWrapper,ContextWrapper继承于Context。也就是说,Context是Activity的父类。
相关延伸:
说到Activity与Context关系,少不了Application与二者的关系,上图可以明确看到Context是Application的父类,那么对于参数传递,需要传递Context对象的时候,
我们是传activity.this还是this.getApplicationContext()呢?
activity的生命周期肯定没有application长,所以为了防止内存泄露:
只要application可以满足的就传this.getApplicationContext()。比如用来ShowToast、获取LayoutInflater对象、获取数据库对象、获取SharedPreferences对象、发广播context.sendBroadcast等,都可以传this.getApplicationContext()。
application不能满足的必须传activity。比如showDialog、activity之间跳转等。