Android 面试题(一)
来源:互联网 发布:电子券怎么在淘宝使用 编辑:程序博客网 时间:2024/05/20 16:34
序言:这是本人在网上看到的一些别人遇到的或自己遇到的面试题,在此和大家分享下(如有错误,请及时纠正)
注:每个问题的最后都会有正确答案
1.说说你对Android四大组件的认识?
四大组件:Activity、Service、BroadcastReceiver、Content 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会在运行时一个一个询问用户授予权限。
7、Android的APK瘦身方法你了解多少?
在这里给大家推荐一个网站,关于图片在线压缩的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:一个硬件设备对应一个架构(mips、arm或者x86),只保留与设备架构相关的库文件夹(主流的架构都是arm的,mips属于小众,默认也是支持arm的so的,但x86的不支持),这样可以大大降低lib文件夹的大小。
8、Android的反编译你有了解吗?(了解),说说你是怎么反编译的,res文件夹是怎么反编译出来的?
(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加固你有了解吗(抱歉,我知道,但是我没做过)?
(1)、爱加密
(2)、梆梆加固
(3)、360加固
他们的原理都是差不多的,主要的步骤就是:我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk。他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。具体的操作方法可以参考 Android中的Apk的加固(加壳)原理解析和实现
在此感谢上面引用到的博客的博主!!!!
- Android面试题(一)
- android面试题(一)
- android面试题(一)
- android面试题(一)
- Android面试题(一)
- android面试题(一)
- Android面试题(一)
- Android 面试题(一)
- android 面试题一
- android面试题一
- Android面试题一
- Android面试题一
- android 面试题一
- Android 面试题一
- android 面试题一
- Android面试题(一)
- Android面试题一
- Android面试题(一)
- spring QuartZ Cron表达式
- STATIC_DRAW, DYNAMIC_DRAW, STREAM_DRAW的区别
- Jquery学习1
- Idea的使用与感受(二)
- Oracle分页查询
- Android 面试题(一)
- 使用Ultra Librarian生成Cadence Allegro的PCB封装库和OrCAD Capture CIS的原理图库
- 删除项目的SVN信息 取消项目的SVN关联 简单粗暴
- 四旋翼飞行器的控制规律及算法实现
- NewsFragmentTabHost 导航栏
- 最长公共子串 后缀自动机
- Java Web开发中路径问题小结
- Java创建内部类对象
- Python函数式编程