Android context.getApplicationContext(),getcontext,context,getActivity,activity区别

在这里插入图片描述

context.getApplicationContext()

定义:getApplicationContext() 是 Context 的一个方法,返回应用的上下文,通常是一个全局的 Application 上下文。
用途:获取应用级别的上下文,可以用于长生命周期的操作,例如访问全局配置、启动 Service 或访问应用的资源等。
特点:
ApplicationContext 不依赖于特定的 Activity,它不会受到 Activity 生命周期的影响,因此适用于需要跨 Activity 和 Service 使用的资源和服务。
由于它不会持有 Activity 的引用,所以避免了内存泄漏的风险。

Context appContext = context.getApplicationContext();

context

context 是一个通用的接口,代表应用的环境,它可以是 Activity、Service、Application 等。
常用方法:
getSystemService(String name):获取系统级别的服务。
getResources():获取应用的资源。
getSharedPreferences(String name, int mode):访问应用的 SharedPreferences。
startActivity(Intent intent):启动新的 Activity。

Activity

Activity 是 Context 的一个子类,代表一个界面或页面。Activity 是 Android 应用的基本组件,通常与用户交互。每个 Activity 都有一个生命周期,负责显示 UI、处理用户输入和管理应用状态。
setContentView(int layoutResID):设置该 Activity 的布局。
findViewById(int id):查找视图控件。
startActivity(Intent intent):启动新的 Activity。
finish():关闭当前 Activity。

getContext()

定义:这是 View 或 Fragment 的一个方法,返回与该视图或 Fragment 关联的 Context。
用途:用于在视图或 Fragment 内部获取当前的 Context,通常用于访问资源、启动活动或访问系统服务。
特点:
如果是 View,则返回的是当前视图的 Context,通常是其父 Activity。
如果是 Fragment,则返回的是 Fragment 所在的 Activity 的 Context。

getActivity()

定义:getActivity() 是 Fragment 的一个方法,返回该 Fragment 当前关联的 Activity。
用途:当你在 Fragment 中需要访问其宿主 Activity 时,可以调用 getActivity() 获取该 Activity 的 Context。
特点:
只有在 Fragment 被附加到 Activity 时,getActivity() 才能返回有效的 Activity,如果 Fragment 尚未附加或已经被销毁,返回值可能为 null。

MyApplication封装的getContext()

package com.zs.test;

import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.util.Log;

import com.songcha.library_business.LibraryBusinessApplication;
import com.songcha.library_common.LibraryCommon;
import com.umeng.commonsdk.UMConfigure;
import com.zs.test.common.Global;
import com.zs.test.util.PackageUtil;

public class MyApplication extends Application {
    @SuppressLint("StaticFieldLeak")
    private static Context mContext ;
    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;

        //设置LOG开关,默认为false
        UMConfigure.setLogEnabled(true);
        // 友盟 SDK 初始化
        UMConfigure.preInit(this, Global.umKey, PackageUtil.getUmengChannelName(this));
        Log.d("myapplication","开广告");

        LibraryBusinessApplication.init(this);
        LibraryCommon.init(this);
    }

    public static Context getContext(){
        return mContext;
    }
}

全局共享上下文: Application 是 Android 应用程序的全局上下文,存在于应用程序的整个生命周期内。将 Application 的上下文保存在 mContext 中,便于在应用的其他地方访问它,而无需显式地传递 Context 对象。

避免内存泄漏: Application 的上下文是全局的,生命周期与应用一致,不会因为 Activity 或 Service 的销毁而导致内存泄漏。因此,在某些需要长期使用 Context 的场景下,优先使用 Application 的上下文。
访问资源
你可以通过 mContext 来访问应用的资源,比如字符串、布局、图片等:

String appName = MyApplication.getContext().getString(R.string.app_name);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值