this,getApplication(),getApplicationContext()的区别

this:虽然回去的是当前的.class,但是Activity的class是继承的Context的class,所以可以获取到当前class的context

getApplication():获取的是工程的Application,但是Application.class是继承于Context.class的,所以能够获取到Application的context的,而且它能够获得Application的主题资源文件等内容。

getApplicationContext():获取的是Application的context

getBaseContext():是获取当前Activity的context


仅是自己对这几项的理解,有不对的地方望大家指正。

在 Android 15(API 34)中,Google 对应用的隐私和安全机制进行了进一步加强,特别是在访问其他应用组件或系统服务方面。如果你在适配 Android 15 的过程中涉及到使用 `getApplication()` 或访问其他应用上下文时,需要注意以下内容: --- ### 一、`getApplication()` 的基本用法 在 `Activity` 或 `Service` 中,可以通过以下方式获取 `Application` 上下文: ```kotlin val application = getApplication() ``` 但如果你在非 `Activity` 或 `Service` 的类中(例如普通 Kotlin 类或 `Context` 持有类),建议通过传入的 `Context` 获取: ```kotlin val application = context.applicationContext ``` --- ### 二、Android 15 中的适配注意事项 1. **权限变更**: - Android 15 引入了更多运行时权限的限制,尤其是对访问其他应用信息的权限。 - 如果你的应用需要访问其他应用的 `ApplicationInfo` 或包信息,可能需要声明新的权限: ```xml <uses-permission android:name="android.permission.GET_INSTALLED_APPS"/> ``` 2. **Context 的使用**: - 推荐使用 `applicationContext` 而不是 `this`(如 `Activity`)来避免内存泄漏。 - 示例: ```kotlin class MyWorker(context: Context) { private val appContext = context.applicationContext } ``` 3. **反射访问 Application 的限制**: - Android 15 对反射访问私有 API 的限制更严格,如果之前通过反射获取 `Application` 或其他组件,需要检查是否被限制。 --- ### 三、示例代码 ```kotlin class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val app = getApplication() // 正确获取 Application Log.d("AppTag", "Application name: ${app.applicationInfo.loadLabel(packageManager)}") } } ``` --- ### 四、推荐实践 - 使用 `applicationContext` 替代 `getApplicationContext()`。 - 避免长期持有 `Activity` 的上下文。 - 使用 `Build.VERSION.SDK_INT` 判断系统版本,进行兼容处理。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值