Android Context的区别
context是什么?
context可以翻译为语境、上下文。但是在程序中的含义可以理解为编程环境,就是你正在写的代码所处的环境,比如你在activity里写代码就代表当前activity。
常用的context有三种activity、service、application。他们都继承自contextWrapper,contextWrapper继承自context。
context在获取资源,启动activity,获取服务等地方都需要使用。
activity的context
在activity中,用到context的时候经常传一个this,在activity的内部类里面用到时就需要写activity.this,因为this指的是当前的使用场景。
常见的代码就是:
Intent intent = new Intent(this,newActivity.class);
startActivity(intent);
this.getResources().get...
在内部类启动activity的时候,有时候为了简单快速会写getApplicationContext,但是要注意,如果通过这样启动standard模式的activity会报错:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an
Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.
Is this really what you want?
标准模式下的activity会默认进入启动它的activity栈中,ApplicationContext并没有任务栈,所以报这个错误。
根据提示,可以在启动activity时指定flag为FLAG_ACTIVITY_NEW_TASK,这样在启动时会创建新的任务栈。
service的context
service中的context是在service对象创建的时候创建。使用时也可以直接使用this。service中的this,不能用于创建dialog,因为service不可见。
application的context
在activity或者service中可以使用getApplication来获取applicaiton实例,但是这个方法只能在activity或者service中才能调用到。在其他情况下使用,比如BroadcastReceiver中,想要获取application实例就要使用getApplicaitionContext方法,任何一个context实例只要调用getApplicationContext方法都会获取到applicaition对象。