安卓开发 在oncreate显示对话框 hide 之后 点不动_腾讯十年开发者发自腾讯一线的真实Android面试资料...

已经步入九月中旬,职场的金九银十跳槽季正悄然进行,不同的是今年比往年形式更加严峻一些,在这种情况下,9、10月份仍然会有一波离职、求职潮。作为求职者来说,面试是一道坎,很多人会恐惧面试,即使是工作很多年的老鸟,可能仍存在面试的焦虑。

所以今天笔者就在这里分享一波福利(文末有领取方式!),里面包含了一些高阶Android方面的技术资料,里面包括有高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术讲解,不多说直接上干货。

c93362c46c5a0dc321f023d5f28a537b.png

腾讯面试题集锦文末有提供答案

1、四大组件是什么

2、四个组件的生命周期

3、Activity的四种启动模式对比

4、Activity在有Dialog时按Home键的生命周期

5、两个Activity 之间跳转时必然会执行的是哪几个方法

6、 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法

7、 Sparse Array

8、 atomic包

9、 Android埋点

10、什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service

11、service如何杀不死

12、 Service与Activity怎么实现通信

13、什么是Intent Service?有何优点

14、什么时候使用Service

15、请描述一下Broadcast Receiver

16、如何注册广播

17、广播的生命周期

18、为什么要用ContentProvider?它和sql的实现上有什么差别

19、请介绍下Android的数据存储方式

20、简单说说Fragment

21、他们是怎么进行传递数据的

22、Fragment Manager , add 和 replace 有什么区别

23、Fragment和view的区别

24、请介绍下Android中常用的五种布局

25、TextView 、ImageView ,Button,ImageButton他们之间的联系和区别

26、RelativeLayout和FrameLayout的区别

27、Padding和Margin有什么区别

28、Listview如何显示不同条目

29、ScrowView 使用的注意

30、Android UI中的View如何刷新

31、什么是ANR(异步加载) 如何避免它

32、Gradle中buildToolsVersion和TargetSdkVersion的区别是什么

33、进程间怎么通信

34、假设手机本地需要缓存数据,如何保证和服务器的数据统一

35、分页怎么做的

36、什么Context

37、Android程序与Java程序的区别

38、Android中的动画有哪几类,它们的特点和区别是什么

39、Android工程的目录结构

40、android的启动流程

1、四大组件是什么?

Activity【活动】:用于表现功能。

Service【服务】:后台运行服务,不提供界面呈现。

BroadcastReceiver【广播接收器】:用来接收广播。

Content Provider【内容提供商】:支持在多个应用中存储和读取数据,相当于数据库。

2、四个组件的生命周期?

Service的生命周期:首先Service有两种启动方式,而在这两种启动方式下,它的生命周期不同。

通过startService()方法启动的服务

初始化结束后系统会调用 void onStart(Intent intent) 方法,用于处理传递给startService()的Intent对象。如音乐服务会打开Intent 来探明将要播放哪首音乐,并开始播放。注意:多次调用startService()方法会多次触发onStart()方法。

通过bindService ()方法启动的服务

初始化结束后系统会调用 IBinder onBind(Intent intent) 方法,用来绑定传递给bindService 的Intent 的对象。注意:多次调用bindService()时,如果该服务已启动则不会再触发此方法。

3、Activity的四种启动模式对比?

Standard:标准的启动模式,如果需要启动一个activity就会创建该activity的实例。也是activity的默认启动模式。

SingeTop:如果启动的activity已经位于栈顶,那么就不会重新创建一个新的activity实例。而是复用位于栈顶的activity实例对象。如果不位于栈顶仍旧会重新创建activity的实例对象。

SingleTask:设置了singleTask启动模式的activity在启动时,如果位于activity栈中,就会复用该activity,这样的话,在该实例之上的所有activity都依次进行出栈操作,即执行对应的onDestroy()方法,直到当前要启动的activity位于栈顶。一般应用在网页的图集,一键退出当前的应用程序。

singleInstance:如果使用singleInstance启动模式的activity在启动的时候会复用已经存在的activity实例。不管这个activity的实例是位于哪一个应用当中,都会共享已经启动的activity的实例对象。使用了singlestance的启动模式的activity会单独的开启一个共享栈,这个栈中只存在当前的activity实例对象。

4、Activity在有Dialog时按Home键的生命周期?

当我们的Activity上弹出Dialog对话框时,程序的生命周期依然是onCreate() —> onStart() —> onResume(),在弹出Dialog的时候并没有onPause()和onStop()方法。而在此时我们按下Home键,才会继续执行onPause()和onStop()方法。这说明对话框并没有使Activity进入后台,而是在点击了Home键后Activity才进入后台工作。

原因就是,其实Dialog是Activity的一个组件,此时Activity并不是不可见,而是被Dialog组件覆盖了其他的组件,此时我们无法对其他组件进行操作而已。

5、两个Activity 之间跳转时必然会执行的是哪几个方法?

首先定义两个Activity,分别为A和B。

当我们在A中激活B时,A调用onPause()方法,此时B出现在屏幕时,B调用onCreate()、onStart()、onResume()。

这个时候B【B不是一个透明的窗体或对话框的形式】已经覆盖了A的窗体,A会调用onStop()方法。

6、 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法?

首先定义两个Activity,分别为A和B。

完整顺序为:A调用onCreate()方法 —> onStart()方法 —> onResume()方法。当A启动B时,A调用onPause()方法,然后调用新的Activity B,此时调用onCreate()方法 —> onStart()方法 —> onResume()方法将新Activity激活。之后A再调用onStop()方法。当A再次回到前台时,B调用onPause()方法,A调用onRestart()方法 —> onStart()方法 —> onResume()方法,最后调用B的onStop()方法 —> onDestory()方法。

弹出Dialog时,调用onCreate()方法 —> onStart()方法 —> onResume()方法。

7. SparseArray

当新建一个key为整型的HashMap时,会出现如下的提示信息,推荐使用SparseArray来替代HashMap:

c865ab56e2a891d46a832203728cd95e.png

接下来就来介绍下SparseArray:

a.数据结构:又称稀疏数组,内部通过两个数组分别存储key和value,并用压缩的方式来存储数据

b.优点:可替代key为int、value为Object的HashMap,相比于HashMap

· 能更节省存储空间

· 由于key指定为int,能节省int和Integer的装箱拆箱操作带来的性能消耗

· 扩容时只需要数组拷贝工作,而不需重建哈希表

c.适用场景:数据量不大(千以内)、空间比时间重要、需要使用Map且key为整型;不适合存储大容量数据,此时性能将退化至少50%

d.使用

添加:public void put(int key, E value)

删除:

· public void delete(int key)

· public void remove(int key)实际上内部会调用delete方法

查找:

· public E get(int key)

· public E get(int key, E valueIfKeyNotFound)可设置假设key不存在时默认返回的value

· public int keyAt(int index)获取相应的key

· public E valueAt(int index)获取相应的value

e.get/put过程:元素会按照key从小到大进行存储,先使用二分法查询key对应在数组中的下标index,然后通过该index进行增删查。源码分析见SparseArray解析。

由于篇幅问题,后续答案请关注转发后后台私信回复【面试】直接获取原文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值