【Android面试知识点系列】Context相关

7 篇文章 0 订阅
7 篇文章 0 订阅

Context是大家比较熟悉的一个类,但是里面有好多我们不怎么熟悉的知识点,接下来就让我们通过学习提问的方式,学习Context类源码。

  • Context是一个接口还是抽象类?
    抽象类,通过源码可以知道。
public abstract class Context {
  • Context的主要用途
    获取一个应用环境的相关全局信息,例如获取资源、访问classes、启动Activity、广播、接收intent等等。
  • 是否可以在BroadcastReceiver中调用bindService方法?为什么?
    不可以,因为BroadcastReceiver如果通过<receiver>标签启动,那么在onReceive中处理了以后,该对象就会释放,这也意味着在onRecevie中不能做异步操作,如果BroadcastReceiver是通过register方法实现,则会与绑定它的对象的生命周期绑定,而bindService是一个异步操作,所以不可以。如果要与Service实现交互的话可以通过startService方法,如果要与已经启动的Service交互可以使用peekService,具体相关方法可以在分析BroadcastReceiver的时候讲解。

-bindService中ServiceConnection是否可以为null?
不可以,因为connection的做用是接收一个service的状态(创建成功、死亡、重启),一个Service的生命周期可以被认为是应该与其绑定的context一致。

  • 如何查看当前应用是否拥有某项权限?
    使用checkPremission方法.

  • 如何创建一个应用程序的私有文件,其他应用无法访问的。
    使用OpenFileOutput(String name,int mode),mode默认是MODE_PRIVATE。如果文件存在则直接返回对应的FileOutputStream,否则会先创建File,再返回FileOutputStream.

  • Environment.getExternalStoragePublicDirectory()与Context.getExternalFilesDir()不同点?
    前者提供但是全部应用共享的存放media的目录,而后者是针对当前应用的。如果当前应用被卸载,后者目录会被删除。

  • getApplicationContext与四大组件的context的区别?
    主要区别在返回的Context对象是与进程绑定在一起,适用于生命周期和当前自己所在的四大组件的生命周期分离的情况。这里源码举了一个例子,就拿注册一个receiver举例,假设该Receiver是用来刷新一个static数据,例如电量等,如果使用一个Activity的Context去registerReceiver,那么在这个activity 被销毁的时候,该receiver就会被注销掉。而如果是用getApplicationContext那么就可以与当前应用进程绑定,但是同样需要注意的是要在Application中destory方法中调用注销方法。

  • 访问应用相关资源的几个方法有哪些?

    1. getAssets()获取AssetManager实例,访问asset目录下的资源文件
    2. getResource()获取Resource实例,可以用来访问res里面的相关资源
    3. getPackageManager()
    4. getContentResolver()
  • 如何发送广播,只能被部分接收者接收到?
    使用sendBroadcast(Intent intent,String pemission),第二个参数可以为null,但是一旦不为null,那么只有拥有该permission的receiver才可以接收到该广播。

  • sendOrderedBroadcast与sendBroadcast的区别?
    前者会按照优先级一次发送一个广播,这样优先级较高的广播接收者就可以在接收到广播的时候,选择停止广播的继续发送,而后者是发出的广播一次性被所有关心的广播接收者接收到。

  • 什么情况下调用startActivity,其中intent必须设置flag为FLAG_ACTIVITY_NEW_TASK ?
    如果当前context不是Activity,那么也没有对应的task来放置该待启动的Activity,所以需要该flag。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值