首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试官灵魂发问:你真的懂 Context 吗?

:四大组件里 Activity 和 Service 都是 Context , 应用的 Context 数就是 Activity 、Service、Application 的个数之和,顺便说一下 Application...:好像都差不多,平常开发的时候用哪个 Context 效果都一样,主要不同就是 Application 的生命周期和应用一样,所以在初始化一些第三方库的时候如果要传 Context 要用 Application...我们调用 ContextWrapper 的 getBaseContext 方法就能拿到 ContextImpl 的实例 再说它们的不同点,它们有各自不同的生命周期;在功能上,只有 Activity 显示界面...面试官:四大组件就剩 BroadcastReceiver ,说说它方法里的 Context 是哪来的 ️:广播接收器,分动态注册和静态注册。...当然,这也是为什么不用的时候要 unregisterReceiver 取消注册,不然这个 Context 就泄漏了哦。

1.6K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android中关于Context的三言两语,源码强势分析带你了解Context!

    : Context 数量 = Activity 数量 + Service 数量 + 1 另外,我们可以看到 Application 和 Service 都是直接继承 ContextWrapper 的而...Activity 在这里说明一下为什么 Service 和 Application 都是继承的 ContextWrapper 类而 Activity 却是继承 ContextThemeWrapper 那是因为...attachBaseContext(context); 接下来我们来分析一下 Activity 在哪里和这个扯上关系的。...到此为止,关于 Application 、Service 和 Activity 关于Context 的源码基本就差不多了。接下来我们来解决一些实际的内容。...这就涉及到作用域的问题了,我们可以发现使用 getApplication 的方法的作用范围是 Activity 和 Service ,但是我们在其他地方却不能使用这个方法,这种情况下我们就可以使用 getApplicationContext

    82700

    Glide4.0源码全解析(一),GlideAPP和.with()方法背后的故事

    到这里我们即将开启我们的源码之旅。 可能我们最大的疑惑就是glide为什么就用了简单的一句代码就可以实现图片的加载。...通过上图我们会发现不论传入Activity、FragmentActivity、Fragment最终都会调用图中红框中的方法,而这两个方法最终流程都是一致的就是那就是会向当前的Activity当中添加一个隐藏的...于是Glide就使用了添加隐藏Fragment的这种小技巧,因为Fragment的生命周期和Activity是同步的,如果Activity被销毁了,Fragment是可以监听到的,这样Glide就可以捕获这个事件并停止图片加载了...不仅如此,你监控了所有的activity怎么和Glide想要监控的Activity关联到一块去,虽然可以实现,但是这个办法真心不实用,既然Glide给了我们这么完美的解决方案我们就要学以致用,以后尽力用到自己的工程中去...GlideAPP()和with()方法到这里就结束了,以上为个人见解,有不同理解的小伙伴可以扫码左侧二维码,参与讨论哦!!!欢迎你来技术交流,无bb,不朋友!!

    1.5K20

    [干货]让你彻底搞懂 Context 到底是什么,如果没弄明白,还怎么做 Android 开发?

    一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序...2:Activity.getApplicationContext,获取当前Activity所在的(应用)进程的Context对象,通常我们使用Context对象时,要优先考虑这个全局的进程Context...getApplication()和getApplicationContext() 上面说到获取当前Application对象用getApplicationContext,不知道你有没有联想到getApplication...那么问题来了,既然这两个方法得到的结果都是相同的,那么Android为什么要提供两个功能重复的方法呢?实际上这两个方法在作用域上有比较大的区别。...3:尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。

    1.5K20

    Android程序后台开启服务,显示通知栏

    我是在activity调用destroy后开启服务,广播接收器代码如下: /** * 监听activity的结束 */ private BroadcastReceiver mFinishReceiver...= new BroadcastReceiver() { @Override public void onReceive(Context context, Intent...的生命周期,所以在activity的onDestroy方法中去发送广播,通知广播接收器程序已经finish了,可以开启服务,所实现的效果就是当程序结束后,所开启的服务会一直运行在后台进行监听,并通过通知栏发送消息...= new NotificationCompat.Builder(getApplicationContext()); 第三步,获取到builder对象后, 就可以对通知栏进行一个界面和通知形式的一些设置了...在builder设置好后就可以发送通知请求 了: //发送通知请求 manager.notify(1,mBuilder.build()); 一个完整的发送通知栏的代码如下,当然下拉时的显示风格也可以自定义

    1.6K20

    Context都没弄明白,还怎么做Android开发?

    一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序...2:Activity.getApplicationContext,获取当前Activity所在的(应用)进程的Context对象,通常我们使用Context对象时,要优先考虑这个全局的进程Context...getApplication()和getApplicationContext() 上面说到获取当前Application对象用getApplicationContext,不知道你有没有联想到getApplication...那么问题来了,既然这两个方法得到的结果都是相同的,那么Android为什么要提供两个功能重复的方法呢?实际上这两个方法在作用域上有比较大的区别。...3:尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。

    37520

    Context都没弄明白,还怎么做Android开发?

    一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序...2:Activity.getApplicationContext,获取当前Activity所在的(应用)进程的Context对象,通常我们使用Context对象时,要优先考虑这个全局的进程Context...getApplication()和getApplicationContext() 上面说到获取当前Application对象用getApplicationContext,不知道你有没有联想到getApplication...那么问题来了,既然这两个方法得到的结果都是相同的,那么Android为什么要提供两个功能重复的方法呢?实际上这两个方法在作用域上有比较大的区别。...3:尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。

    80340

    context和getApplicationContext()介绍

    网上有很多朋友在这里传入this.getApplicationContext(),这是不对的。 AlertDialog对象是依赖于一个View的,而View是和一个Activity对应的。...于是,这里涉及到一个生命周期的问题,this.getApplicationContext()取的是这个应用程序的Context,Activity.this取的是这个Activity的Context,这两者的生命周期是不同的...而AlertDialog应该是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入this.getApplicationContext(),就表示它的生命周期是整个应用程序...下面具体解释它的内涵 其实Activity.this就是context的一个具体,Activity.this是你当前所在的activity的上下文,this.getApplicationContext(...(this);你是要在当前的activity里面创建对话框,如果传递的是this.getApplicationContext(),这是整个应用的上下文,代码怎么会知道你想在哪个具体的activity里面创建对话框呢

    32620

    Android插件化基础2----理解Context

    Context如何实现以上功能的? 为何不同的Context访问资源都得到的是同一套资源? 为何不同场景下要使用不同的Context? 一个APP中有多少个Context?...比如,你在家里打”农药“就是一个场景;你在宾馆和妹子一起用手机看"小"电影也是一个场景;你在公司用电脑调试你的app也是一个场景。那么Context 就可以抽象的理解为一个场景,每个场景有不同的内容。...综上所述,我们可以看出在设备其他因素不变的情况下我们通过不同的Context实例得到的Resources是同一套资源。 关于Resources我后续会专门开个文章去详细讲解。...Timer和TimerTask没有进行Cancel,从而导致Timer和TimerTask会一直持有外部Activity的引用,所以要在适当的时机cancel。...调用的getSystemService获取系统服务,这些服务运行在他们自己的进程执行一系列后台工作或者提供和硬件交互的家口,如果Context对象需要在一个Service内部事件发生时随时受到通知,则需要把自己作为一个监听器注册进去

    1.4K30

    Glide生命周期原理

    Android App的页面是有生命周期的,Glide比较好的一个功能就是具有生命周期管理功能,能够根据页面和APP的生命周期来管理图片的加载和停止,也开放接口供用户在内存紧张时手动进行内存管理。...getApplicationContext,也就是不进行生命周期管理: 在getRequestManagerFragment中先查看当前Activity中有没有FRAGMENT_TAG这个标签对应的Fragment...get(@NonNull Activity activity) { if (Util.isOnBackgroundThread()) { return get(activity.getApplicationContext...再贴一次RequestManagerRetriever中获取Fragment的代码,前面留了一个疑问,为什么这里会需要一个pendingRequestManagerFragments对Fragment进行缓存...那么主线程中的执行顺序和消息队列中的执行顺序关系是什么?

    81930

    重新认识Android Context

    一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序...2:Activity.getApplicationContext,获取当前Activity所在的(应用)进程的Context对象,通常我们使用Context对象时,要优先考虑这个全局的进程Context...getApplication()和getApplicationContext() 上面说到获取当前Application对象用getApplicationContext,不知道你有没有联想到getApplication...相信这个问题会难倒不少开发者。 ?...那么问题来了,既然这两个方法得到的结果都是相同的,那么Android为什么要提供两个功能重复的方法呢?实际上这两个方法在作用域上有比较大的区别。

    53330

    Context与Application 理解

    Context 理解 Context的作用 首先来谈一谈Context 什么是Context以及作用 它是应用环境的全局接口,一个抽象类,它的实现是由Android系统提供,是一个系统资源类,启动Activity...Context,调用都委托给他 不同组件Context的区别 Context在不同组件也有区别,下面一一列出不同,这里的Activity与Service中Context的作用是相同的,就不再列出Service...中Context的作用 Activity的Context作用:跟随activity一起启动,内部调用performLaunchActivity,newActivity,classLoad加载,newInstance...Activity里的this和getBaseContext的区别 this返回的是activity对象自己 getBaseContext返回的是ContextWrapper的mBase getApplication...与getApplicationContext的区别 getApplicationContext是Context的抽象函数 getApplication是activity与service特有的,广播不能调用获取

    1.6K30

    Android Context完全解析,你所不知道的Context的各种细节

    由此,其实我们就已经可以得出结论了,Context一共有三种类型,分别是Application、Activity和Service。...这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。 那么Context到底可以实现哪些功能呢?...由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。...Context一共有Application、Activity和Service三种类型,因此一个应用程序中Context数量的计算公式就可以这样写: Context数量 = Activity数量 + Service...(); Log.d("TAG", "myApp is " + myApp); } } 也就是说,getApplicationContext()方法的作用域会更广一些,任何一个Context的实例

    1.7K90

    Android Context完全解析,你所不知道的Context的各种细节

    由此,其实我们就已经可以得出结论了,Context一共有三种类型,分别是Application、Activity和Service。...这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。 那么Context到底可以实现哪些功能呢?...由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。...Context一共有Application、Activity和Service三种类型,因此一个应用程序中Context数量的计算公式就可以这样写: Context数量 = Activity数量 + Service...()方法的作用域会更广一些,任何一个Context的实例,只要调用getApplicationContext()方法都可以拿到我们的Application对象。

    90220
    领券