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);