百度 Android 开发面试题(2024版)
具体详细内容请查看资源!!!
具体详细内容请查看资源!!!
具体详细内容请查看资源!!!
1、 Android dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念
DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,
都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进
程,所以说可以认为是同一个概念。
2、sim 卡的 EF 文件有何作用
sim 卡的文件系统有自己规范,主要是为了和手机通讯,sim 本
身可以有自己的操作系统,EF 就是作存储并和手机通讯用的
3、嵌入式操作系统内存管理有哪几种,各有何特性 ?
页式,段式,段页,用到了 MMU,虚拟空间等技术
4、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度
予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作
出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工
业控制、军事设备、
航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可
分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。
5、一条最长的短信息约占多少 byte?
中文 70(包括标点),英文 160 个字节
6、 android 中的动画有哪几类,它们的特点和区别是什么?
两种,一种是 Tween 动画、还有一种是 Frame 动画。Tween 动画,这种实现方
式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种 Frame 动画,
传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
7、handler 机制的原理
andriod 提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先
出原则。Looper 类用来管理特定线程内对象之间的消息交换(Message Exchange)。 1)Looper: 一个线程可以产生一个 Looper 对象,由它来管理此线程里的
Message Queue(消息队列)。 2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到
Message Queue 里;或者接收 Looper 从 Message Queue 取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UI thread 通常就是 main thread,而 Android 启动程序时会替它
建立一个 Message Queue。 8、说说 mvc 模式的原理,它在 android 中的运用
MVC(Model_view_contraller)” 模型_视图_控制器”。 MVC 应用程序总是由这
三个部分组成。Event(事件)导致 Controller 改变 Model 或 View,或者同时改
变两者。只要 Controller 改变了 Models 的数据或者属性,所有依赖的 View 都
会自动更新。类似的,只要 Controller 改变了 View,View 会
从潜在的 Model 中获取数据来刷新自己。
View 重绘和内存泄露的好像是面试经常问的问题
- View 的刷新:
在需要刷新的地方,使用 handle.sendmessage 发送信息,然后在 handle 的
getmessage 里面执行 invaliate 或者 postinvaliate. - GC 内存泄露
出现情况:
1.数据库的 cursor 没有关闭
2.构造 adapter 时,没有使用缓存 contentview
衍生 listview 的优化问题-----减少创建 view 的对象,充分使用
contentview,可以使用一静态类来优化处理 getview 的过程/
3.Bitmap 对象不使用时采用 recycle()释放内存
4.activity 中的对象的生命周期大于 activity
调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size]
还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个 Hal 层.
这篇文章会涉及到以下几个内容
一 Activity 的生命周期
二 让 Activity 变成一个窗口:Activity 属性设定
三 你后台的 Activity 被系统
回收怎么办:onSaveInstanceState
四 调用与被调用:我们的通信使者 - Intent
一 Activity 的生命周期
和其他手机 平台 的应用程序一样,Android 的应用程序的生命周期是被统
一掌控的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不
能改变它,只能学习并适应它。
简单地说一下为什么是这样:我们手机在运行
一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程
序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,
至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。言归正传,
Activity 的基本生命周期如下代码所示:
Java 代码
public class MyActivity extends Activity
{
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
你自己写的 Activity 会按需要
重 载这些方法,onCreate 是免不了的,在一个 Activity 正常启动的过程中,
他们被调用的顺序是 onCreate -> onStart ->onResume, 在 Activity 被干掉的
时候顺序是 onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期,
但是有人问了
,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的
一个 Activity 是全屏的那么:onPause->onStop ,恢复的时候
onStart->onResume ,如果打断
这个应用程序的是一个 Theme 为 Translucent 或者 Dialog 的 Activity 那么只
是 onPause ,恢复
的时候 onResume 。
详细介绍一下这几个方法中系统在做什么以及我们应该做什么:
onCreate:
在这里创建界面,做一些数据的初始化工作
onStart:
到这一步变成用户可见不可交互的
onResume:
变成和用户可交互的,(在 activity 栈系统通过栈的方式管理这些个 Activity
的最上面,运行完弹出栈,则回到上一个 Activity)
onPause:
到 这一步是可见但不可交互的,系统会停止动画等消耗 CPU 的事情从上文的描
述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降
低,有可能被系统收回。在这里保存的数据,应该在 onResume 里读出来,注意:
这个方法里做的事情时间要短,因为下一个 activity 不会等到这个方法完成才
启动
onstop:
变得不可见,被下一个 activity 覆盖了
onDestroy: 这是 activity 被干掉前最后一个被调用方法了,可能是外面类调
用 finish 方法或者是系统为了节省空间将它暂时性的干掉,可以用
isFinishing()来判断它,如果你有一个 Progress Dialog 在线程中转动,请在
onDestroy 里把他 cancel 掉,不然等线程结束的时候,调用 Dialog 的 cancel
方法会抛异常的。
onPause,onstop, onDestroy,三种状态下 activity 都有可能被系统干掉为
了保证程序的正确性,你要在 onPause()里写上持久层操作的代码,将用户编辑
的内容都保存到存储介质上(一般 都是数据库)。实际工作中因为生命周期的
变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,
你还要去维护那个线程,是暂停还是杀 掉还是数据回滚,是吧?因为 Activity
可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都
是采用 Android 的消息机制 [Handler,Message]来处理多线程和界面交互的问
题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟
大家分享。
二 让 Activity 变成一个窗口:Activity 属性设定
讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很 简单你只需要设置一下 Activity 的主题就可以了在
AndroidManifest.xml 中定义 Activity 的地方一句话:
具体详细内容请查看资源!!!
具体详细内容请查看资源!!!
具体详细内容请查看资源!!!