怎么拿下Android开发Android面试题?(一)

Hello,之前更新了面试中的Android的Java面试部分,这里会更新关于Android部分的面试题。


第一节 Android 四大组件相关

1.1 Activity 与 Fragment 之间常见的几种通信方式?

viewModel 做数据管理,activity 和 fragment 公用同个
viewModel 实现数据传递

1.2 LaunchMode 的应用场景?

LaunchMode 有四种,分别为 Standard, SingleTop,
SingleTask 和 SingleInstance,下面说一下具体使用场景:
Standard:
Standard模式是系统默认的启动模式,一般我们 app 中
大部分页面都是由该模式的页面构成的,比较常见的场景
是:社交应用中,点击查看用户A信息->查看用户A 粉丝
->在粉丝中挑选查看用户B信息->查看用户A粉丝… 这种
情况下一般我们需要保留用户操作 Activity栈的页面所
有执行顺序。
SingleTop:
SingleTop 模式一般常见于社交应用中的通知栏行为功
能,例如:App 用户收到几条好友请求的推送消息,需
要用户点击推送通知进入到请求者个人信息页,将信息页
设置为 SingleTop 模式就可以增强复用性。
SingleTask:
SingleTask 模式一般用作应用的首页,例如浏览器主页,
用户可能从多个应用启动浏览器,但主界面仅仅启
动一次,其余情况都会走onNewIntent,并且会清空主界
面上面的其他页面。
SingleInstance:
SingleInstance 模式常应用于独立栈操作的应用,如闹钟
的提醒页面,当你在A应用中看视频时,闹钟响了, 你
点击闹钟提醒通知后进入提醒详情页面,然后点击返回
就再次回到A的视频页面,这样就不会过多干扰到用户先
前的操作了。

1.3 BroadcastReceiver 与

LocalBroadcastReceiver 有什么区别?
BroadcastReceiver 是跨应用广播,利用Binder机制实现,
支持动态和静态两种方式注册方式。
LocalBroadcastReceiver 是应用内广播,利用Handler 实
现,利用了IntentFilter的match功能,提供消息的发布与
接收功能,实现应用内通信,效率和安全性比较 高,
仅支持动态注册。

1.4 对于 Context,你了解多少?

Context也叫上下文,是有关应用程序环境的全局信息的接
口。这是一个抽象类, 它允许访问特定于应用程序的资源和
类,以及对应用程序级操作的调用,比如启动活动,发送广
播和接收意图等;
Activity,Service,Application都是 Context的子类。
享学课堂
Context 的具体实现类是 ContextImpl, 还有一个包装类
ContextWrapper, ContextWrapper 的 子 类 有 Service ,
Application,ContextThemeWrapper, Activity 又是
ContextThemeWrapper 的子类,
ContextThemeWrapper 也可以叫 UI Context,跟UI 操作相关
的最好使用此类 Context。
ContextWrapper 中有个 mBase,这个 mBase 其实是
ContextImpl,它是在Activity, Service, Application 创建时通过
attachBaseContext()方法将各自对对应
ContextImpl 赋值的。对 context 的操作,最终实现都是在
ContextImpl。
对于 startActivity操作

  • 当为Activity Context则可直接使用;
  • 当为其他Context, 则必须带上
    FLAG_ACTIVITY_NEW_TASK flags才能使用;因为非 Activity
    context启动 Activity没有 Activity栈,则无法启动,因此需要
    加开启新的栈;
  • 另外UI相关要Activity中使用. getApplication()和getApplicationContext()区别?
  1. 对于Activity/Service来说,getApplication()和
    getApplicationContext()的返回值完全相同; 除非厂商修改过接口;
  2. BroadcastReceiver在onReceive的过程, 能使用
    getBaseContext().getApplicationContext获取所在
    Application, 而无法使用getApplication;
  3. ContentProvider能使用
    getContext().getApplicationContext()获取所在Application. 绝大多数情况下没有问题, 但是有可能会出现空指针的问题, 情况如下:
    当同一个进程有多个apk的情况下, 对于第二个apk是由
    provider方式拉起的, 前面介绍过provider创建过程并不
    会初始化所在application, 此时执行
    getContext().getApplicationContext()返回的结果便是
    NULL. 所以对于这种情况要做好判空.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴天学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值