android Context的使用

释放双眼,带上耳机,听听看~!

今天,简单讲讲android中context的使用。

在Android中,Context到底是个什么鬼东西,它到底是干嘛使得,我读了很多篇文档,然而并不能清除的理解它的含义。

答案:
简单来说,就像它的名字(上下文)一样,他是项目当前的状态的一个标识,他可以让新创建出来,新加入进来的对象或组件知道当前项目的进度,处于一个什么状态,这样我们就可以容易理解上下文的意思了把,上文就是自己知道了之前项目已经处于一个什么样的状态,下文就是告诉后来的对象或者组件当前项目处于一个什么状态。

你可以通过getApplication()、getContext()、getBaseContext()或者this(在当前的Activity中时)来获取context上下文。

 

Context,中文直译为“上下文”,SDK中对其说明如下:

Interface to global information about an application environment. This is an abstract class whose implementation

is provided by the
Android system. It allows access to application-specific resources and classes, as well as up-calls

for application-level operations such as launching activities, broadcasting and receiving intents, etc

从上可知一下三点,即:

1、它描述的是一个应用程序环境的信息,即上下文。

2、该类是一个抽象(abstract class)类,android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。

3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent

信息 等。。

 

一、Context相关类的继承关系

我们有3种方式可以获得context:

  1. mContext = getApplicationContext();
    这种方式获得的context是全局context,整个项目的生命中期中是唯一的且一直存在的,代表了所有activities的context
  2. mContext = getContext()
    这种方式获得的context当activity销毁时,context也会跟着销毁了
  3. mContext = getBaseContext();
    说实话我也没用过这种方式

 

接下来。简单讲讲怎么使用上下文。

1.两种上下文: 

(1)Activity.this                               界面的上下文

(2)getApplicationContext()         整个应用程序的上下文

 

 

2.通常是两者是可以互用,但是如下对话框创建的场景,就只能使用Activity.this,如下:

package com.itheima.context;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
(1)TextView tv = new TextView(MainActivity.this); //这里不能使用getApplicationContext()
}
public void click(View view){
(2) AlertDialog.Builder builder = new Builder(this);
builder.setTitle("警告");
builder.setMessage("对话框出来了");
builder.setPositiveButton("确定", null);
builder.show();
}
}

 

在上面(1)和(2)中不能使用getApplicationContext():

(1)TextView tv = new TextView(MainActivity.this);tv是依赖Activity(界面而存在的);Activity销毁,tv也会销毁

如果使用TextView tv = new TextView(getApplicationContext()),可能Activity销毁了,但是整个应用程序还没有销毁,这样这个tv会变成空指针,导致内存泄露。

 

(2)AlertDialog.Builder builder = new Builder(MainActivity.this);

同样创建对话框,对话框也是依赖Activity而存在的,如果使用AlertDialog.Builder builder = new Builder(getApplicationContext());

这个getApplicationContext()是Activity的父类,父类可能由很多子类Activity继承,这样对话框不能定位在哪个Activity上显示,会报错。

 

(1)和(2)中tv和builder的显示都必须绑定特定的Activity界面

 

android Connext的使用就讲完了。

 

就这么简单。

人已赞赏
Android文章

android LinkedList的基本用法

2020-4-10 16:03:04

Android文章

android jni 返值

2020-4-10 17:19:07

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索