Android 面试题(一)

来源:互联网 发布:电子券怎么在淘宝使用 编辑:程序博客网 时间:2024/05/20 16:34

序言:这是本人在网上看到的一些别人遇到的或自己遇到的面试题,在此和大家分享下(如有错误,请及时纠正)

注:每个问题的最后都会有正确答案

1.说说你对Android四大组件的认识?

四大组件:ActivityServiceBroadcastReceiverContent Provider


2. Broadcast Receiver在什么情况下能用得到?

广播是一种机制,而且是双向的(工作线程可以往主线程发广播,主线程也可以往工作线程发广播),使用的场景有如下几点(只列举几点):
(1)、同一app内部的同一组件内的消息通信(单个或多个线程之间)
(2)、同一app内部的不同组件之间的消息通信(单个进程)
(3)、同一app具有多个进程的不同组件之间的消息通信
(4)、不同app之间的组件之间消息通信
(5)、Android系统在特定情况下与App之间的消息通信


3、请简述一下Activity的生命周期以及在什么情况下会执行相应的生命周期?

Activity生命周期:

onCreate——>onStart——>onResume——>onRestart——>onPause——onStop——>onDestory
执行生命周期:在Activity创建的时候,会执行

onCreate—>onStart—>onResume
在你进入Activity之后按返回键,会执行onPause—>onStop—>onDestory;
在你进入Activity之后按Home键,会执行onPause—>onStop;
这个时候当你又回到Activity,会执行onRestart—>onStart—>onResume;
当你从A1界面跳转到A2界面时,生命周期的变化如下:
onCreate(A1)—>onStart(A1)—>onResume(A1)—>onPause(A1)—>onCreate(A2)—>onStart(A2)—>onResume(A2)—>onStop(A1)
此时如果在A2界面按下返回键,生命周期会的变化如下:
onPause(A2)—>onRestart(A1)—>onStart(A1)—>onResume(A1)—>onStop(A2)—onDestory(A2)
注:如果A2界面是一个透明主题的话,那么A1不会调用onStop方法


4、请简述一下你对fragment的理解?

fragment被称为碎片,可以作为界面来使用,在一个Activity中可以嵌入多个Fragment,而且Fragment不能单独存在,必须依附于Activity才行,但是Fragment又有自己的生命周期,也能直接处理用户的一些事件,Fragment的生命周期也受依附的Activity的生命周期影响;一般来说Fragment在平板开发中用的比较多,还有就是Tab切换


5、请简述一下Fragment的生命周期?

fragment的生命周期:onAttach——>onCreate——>onCreateView——>onViewCreated——>onActivityCreated——>onStart——>onResume——>onPause——>onStop——>onDestroyView——>onDestroy
fragment的生命周期大致就这么多,但是还有一个比较常见的就是onHiddenChanged,这个是在切换fragment的时候会执行,至于什么场景下会执行什么,我还是建议你自己动手实验一把


6、说说你知道的Android5.0和Android6.0的新功能?

Android5.0:又称为Lollipop(棒棒糖),我觉得其最大的改变在于界面风格和交互体验,用的最多的可以说是Material Design设计风格,Recyclerview,CardView等。
MaterialDesign中常用的控件:
(1)、AppBarLayout、ToolBar
(2)、DrawerLayout、NavigationView
(3)、RecyclerView、CardView、AutoScrollViewPager
(4)、CoordinatorLayout、CollapsingToolbarLayout、TabLayout
(5)、TextInputLayout
(6)、FloatingActionButton、Snackbar
对于上面这些控件,我是将他们常在一起搭配使用的放在一起,如果你想更好的了解Material Design,请移步12个MaterialDesign风格控件的使用,一般面试官会着重问RecyclerView,为什么?因为RecyclerView现在正在逐步代替ListView和GridView,它的功能很强大,性能更好(Item的复用不需要自己去维护),如果有兴趣了解更多ListView与RecyclerView的区别的同学,请移步RecyclerView和ListView使用对比分析
Android6.0:又称为Marshmallow(棉花糖),我觉得其最大的改变在于用户对权限的管理,我们都知道,6.0以下的Android系统在安装app的时候会默认勾选一些权限,一旦用户安装了,app可以在用户毫不知晓的情况下访问权限内的所有东西,这样感觉起来挺不好的。6.0以后,app将不会在安装的时候授予权限,取而代之的是,app会在运行时一个一个询问用户授予权限。


7AndroidAPK瘦身方法你了解多少?

在这里给大家推荐一个网站,关于图片在线压缩的TinyPNG,然后使用android studio自带工具Lint剔除无用资源(res资源文件),如果你闲的话那就再手动剔除一遍(LZ当年也是这么干的);然后你可以去实验一下,解压一个APK包,然后看看他的内部结构:
(1)
classes.dex:这是java源码编译后生成的java字节码文件
(2)
resources.arsc:这是编译后的二进制资源文件
(3)
AndroidManifest.xml:这个Manifest文件里面都是编译之后的,都是二进制,看不到什么信息
(4)
proguard.cfg:这是代码混淆配置文件
(5)
META-INF:该目录下存放的是签名信息,用来保证apk包的完整性和系统的安全
(6)
res:该目录下存放的是资源文件,但是也是编译之后的,二进制的。
你试过就会知道,真正容量大的就是classes.dex、资源文件,当然了有时候也会有lib目录,lib目录下放的是一些jar包和so包,容量也是挺大的,所以这里我们重点对这三类进行瘦身:
(1)
classes.dex:使用Proguard,这可以让你在编译的时候对代码进行混淆和优化,删掉不必要的jar包和无用的代码。
(2)
res:使用Lint代码分析器,由于Proguard只会对Java代码起作用,所以使用我们还得结合Lint工具,来帮你找到无用的资源文件。
(3)
lib:一个硬件设备对应一个架构(mipsarm或者x86),只保留与设备架构相关的库文件夹(主流的架构都是arm的,mips属于小众,默认也是支持armso的,但x86的不支持),这样可以大大降低lib文件夹的大小。


8、Android的反编译你有了解吗?(了解),说说你是怎么反编译的,res文件夹是怎么反编译出来的?

首先我们得知道APK长什么样,在上面那个问题中已经介绍过了,就不再多说,我们都知道,编译之后的APK都是一些二进制什么的,没有什么人类能看得懂的东西,所以我们需要借助工具来帮我们看了:
(1)、dex2jar:这个工具用于将dex文件转换成jar文件。下载地址
(2)、jd-gui:这个工具用于将jar文件转换成java代码。下载地址
(3)、apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。下载地址
具体的反编译内容还是可以去看看
郭神写的那篇,比较细致。


9、Android的多渠道打包你了解吗(抱歉,我知道,但是我没做过)?

多渠道打包:就是指分不同的市场打包,如安卓市场、百度市场、谷歌市场等等,Android的这个市场有点多,就不一一列举了,多渠道打包是为了针对不同市场做出不同的一些统计,数据分析,收集用户信息。
百度一下多渠道打包,发现用的最多的应该是AndroidStudio用的多的友盟多渠道打包和Eclipse用的多的兰贝壳儿插件多渠道打包,具体的步骤可以参考下面:
友盟多渠道打包:使用Android studio Gradle 实现友盟多渠道打包
兰贝壳儿插件多渠道打包:使用兰贝壳儿Android多渠道批量打包


10、那Android的apk加固你有了解吗(抱歉,我知道,但是我没做过)?

APK加固,说白了就是给APK加密,然后再套上一层壳就可以了,现在比较流行的第三方加固平台有,爱加密、梆梆加固、360加固:
(1)、爱加密
(2)、梆梆加固
(3)、360加固
他们的原理都是差不多的,主要的步骤就是:我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk。他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。具体的操作方法可以参考 Android中的Apk的加固(加壳)原理解析和实现


在此感谢上面引用到的博客的博主!!!!





1 0
原创粉丝点击