Android笔试题

本文列举了Android笔试中常见的技术问题,包括内存优化、Activity生命周期、ListView优化、多线程处理、图片加载库的选择等。文章深入探讨了Android开发中的关键知识点,如协议使用、内存管理、界面更新策略以及不同设计模式的应用。此外,还讨论了与其他平台(如H5)的比较、系统架构、网络框架选择和避免死锁的方法。通过对这些问题的解答,有助于开发者提升Android开发技能。
摘要由CSDN通过智能技术生成

1、前后台交互用到的协议?
http、https,数据交互:post、get比较多

2、Android怎么做内存优化?
内存优化在Android中比较重要,像广播注册没有关闭、static、无关的引用等,我感觉最主要的是图片的问题!可以参考:
内存优化的几种方案
Android studio检查内存泄露与解决攻略

3、两个Activity切换的时候依次回调了什么方法?
设置两个Activity:ActivityOne,ActivityTwo;
one启动two:
one onCreate: onCreate
one onStart: onStart
one onResume: onResume
one onPause: onPause
two onCreate: onCreate
two onStart: onStart
two onResume: onResume
one onStop: onStop
two启动one:
two onPause: onPause
one onCreate: onCreate
one onStart: onStart
one onResume: onResume
two onStop: onStop

4、竖屏切换切换依次回调了什么方法?
开始还是走的是:onCreate-onStart-onResume
切换到横屏:onPause-onStop-onDestroy-onCreate
-onStart-onResume
切换到竖屏: onPause: onPause-onStop-onDestroy-onCreate
-onStart-onResume
如果设置android:configChanges=”“生命周期会发生改变:
参考:很竖屏切换生命周期
总结:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。

5、padding和margin的区别?
padding:内边距,文本内容(例如文本或图片)距离该空间的边距;
margin:外边距,该控件距离父控件的边距;

6、ListView的优化方案?
当convertView为空时,用setTag()方法为每一个view绑定一个可以存放控件的ViewHolder对象。当convertView不为空,重复利用已创建的view得时候,使用getTag()方法获取绑定的ViewHolder对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件。

  • 复用ConvertView
  • 自定义静态类ViewHolder,减少findViewById的次数
  • 异步加载数据,分页加载数据
  • 使用WeakRefrence引用ImageView对象

7、有多少种情况可以更新UI?
1. runOnUiThread
2. View.post(view自带的方法)
3. Handler
4. AsyncTask
5. EventBus

8、h5和安卓原生,使用哪个?为什么?之间的区别?
分情况使用,原生性能好,调用系统API方便。H5性能差点,跨平台强(在android和ios使用同一套代码),H5的优势在于成本小,迭代快速。
如果是咨询浏览的app,页面经常更改的或者在android、ios平台都是用的,那当然是H5好了。
如果是对性能要求高(流畅度),API的频繁调用当然是原生的比较好。
参考:H5与原生的比较
H5与原生的区别

9、Pracelable和Serializable的区别?
两种都是用于支持序列化、反序列化话操作,两者最大的区别在于存储媒介的不同,Serializable使用IO读写存储在硬盘上,而Parcelable是直接在内存中读写,很明显内存的读写速度通常大于IO读写,所以在Android中通常优先选择Parcelable。

比较:
- Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
- Pracelable不能使用在要将数据存储在磁盘的情况。尽管Serializable效率低点,但在这种情况下,还是建议使用Serializable。
- Serializable的实现,只需要继承Serializable即可。这只是给对象打一个标记,系统会自动将其序列化。
- Pracelable的实现,需要在类中添加一个静态成员变量CREATOR,这个变量需要继承Pracelable.Creator接口。

10、说一下安卓系统架构?
Android分为四个层:从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

  • 应用程序
      Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
     
  • 应用程序框架
      开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。
      
  • 系统运行库
      Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。
    -Linux 内核
     Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
    参考:Android系统架构详解

11、说一下Android的设计模式?
23中设计模式的分类:
设计模式分为三种类型:
(1)创建型模式5种:单例模式,抽象工厂模式,工厂模式,原型模式,建造者模式。
(口诀:单原建造者,东西二厂)
(2)结构型模式7种:适配器模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值