android Context的使用

本文详细解析了Android中的Context概念,介绍了其作为应用程序环境信息的作用,并解释了如何通过不同方法获取Context,以及在实际开发中如何正确使用它。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天,简单讲讲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的使用就讲完了。


就这么简单。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值