android 71题回答题和概念题为主分析.docx
- 文档编号:10982093
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:39
- 大小:44.75KB
android 71题回答题和概念题为主分析.docx
《android 71题回答题和概念题为主分析.docx》由会员分享,可在线阅读,更多相关《android 71题回答题和概念题为主分析.docx(39页珍藏版)》请在冰豆网上搜索。
android71题回答题和概念题为主分析
Android面试题
1.下列哪些语句关于内存回收的说明是正确的?
(b)
A、程序员必须创建一个线程来释放内存
B、内存回收程序负责释放无用内存
C、内存回收程序允许程序员直接释放内存
D、内存回收程序可以在指定的时间释放内存对象
解析:
android内存回收机制
我想每个人第一次用Android的时候,不可避免的会去装个任务管理器,然后对里面时刻都停留着一大堆的程序表示触目惊心,然后会在桌面上建立一个快捷清空内存的按钮,时不时啪的按一下,看着内存剩余数量从30多变成100多然后很有快感...其实吧,Android是Linux的内核,每一个程序都是一个独立的JAVA虚拟机,就和油汤里的油花一样互不干扰,这样充分保证了万一某个程序的JAVA虚拟机崩溃,系统依旧稳定正常运行.而Android和传统Linux不一样的地方又在于,传统Linux在进程活动停止后就结束了,这就类似于我们用S60和WM一样,关闭程序,内存释放.而Android会把这些进程保留在内存里,干嘛呢?
为了保证你再次激活这些进程时候启动的更快,比如说我们挂在桌面的Widgets,具体一点我们拿新浪微博举例吧.我刚看完,退出,突然我想我发一条微博吧,那么这个时候我可以直接在桌面Widgets上操作----设想一下如果我退出的时候这个进程就终止了,那么我在桌面上点击Widgets的时候会不会卡顿一下甚至没有响应?
----这就跟我们把Widgets挂在桌面的行为完全背离了,放在桌面上就是为了能随时观察到程序运行的情况,以及随时可以快速调用程序.所以Android并没有在进程活动停止就释放对应的内存.那么也许你还是会有疑问,那么内存够不够用呢?
512的内存被我用的只剩56M是不是很恐怖?
其实系统一点也不卡的,蛋定蛋定是的,我理解,因为大家这么多年Windows都用习惯了,Windows内存不足的时候机器卡的会让你想砸掉机箱,而且调用虚拟内存的时候硬盘喀喀喀想的让你肉疼.你肯定也会怕你的手机明明512M内存结果就剩下30来M把你卡到崩溃.事实上呢,Android会在系统需要更多内存的时候,去释放掉那些占用内存的进程----这个活动是智能的.最早大家认为是有个排序,比如最近使用过哪些程序(LRU机制,LastRecentlyUsed),然后结束最早的进程.不过并非如此,否则就变成我们上小学时候那样,个子高的块头大的男生跟班长下去拔草扛新书,女生们留在班里绣花吧...这样很明显不公平而且没准会结束掉那些我们并不想结束掉的进程----譬如说这会儿我想切回到刚才后台的网页继续浏览结果悲怆的发现它被系统给我强制关闭了...
Android把进程分成了一些优先级,比如前台进程(Foreground),比如我们正在看书,那么看书的程序就是前台进程,这些进程是不会被系统优先结束的.当我把它切到后台的时候,它就变成后台进程了.还有可见进程(Visible),这个怎么说呢,譬如输入法程序,你平时是看不见它的,但是在你打开输入界面的时候,它会很快的弹出来,而不是让你等啊等啊等,看不到的原因是透明度的机制,咱就不要钻牛角尖讨论为啥我看不见了...还有桌面的Widgets,比如我们的桌面时钟,这个东西就是可见的,如果它被系统终止了会有什么样的结果?
这个Widgets依然会显示在桌面上,但是时针不走了...主要服务,比如说,电话的拨号功能,你也不想正急着打电话呢结果人家给你卡半天吧,尤其像我这样联系人上2000的,载入一遍真的很慢啊...所以这些主要服务平时也不会被系统自动结束,除非你非要关它,关了也会自己重新加载的.这也是你完全释放内存以后过一会就看着内存可用值又慢慢降低的原因.
次要服务(secondaryserver),诸如谷歌企业套件,Gmail,联系人,看着这些程序出现在任务管理器里可能你会非常的莫名其妙,丫的这都哪跟哪啊我没开啊...其实它们和一些系统功能也是息息相关的,比如Gmail的邮件推送,我们时常需要用到它们,所以系统也太会去终止它们.甚至于HTC机器上著名的HTCSense,这个也是次要服务,但是其实它承接着整个系统界面的运行,所以,如果你强行关闭所有进程的时候,你的屏幕会变成一片白...然后慢慢等HTCSense加载.
后台进程(hidden),就是我们通常意义上理解的启动后被切换到后台的进程,比如如浏览器和阅读器.后台进程的管理策略有多种,但是一般来讲,系统都会视内存情况,尽可能多的保留后台程序,这样会影响到你启动别的程序的运行速度----我想这个很好理解,因为内存确实不够了,而且你还没让系统自动释放内存.但好处是,你再次切换到这些已启动的程序时几乎是无缝的,速度绝对比你从0开始启动它要快得多.所以,这种后台进程在内存极度不够的时候,肯定会被系统选择性的干掉的.内容供应节点(contentprovider),没有程序实体,仅提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等.在系统自动终止进程时,这类程序享有优先的被干掉权...空进程(empty),没有任何东西在内运行的进程,有些程序在退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息.这部分进程无疑是系统最先终止的.
说了这么多,其实还是要结合实际的程序来看一下的,比如Android这个很有名的自动内存调配的软件,AutoMemoryManager,它的设置和帮助界面就如上面所说的,它自动提供了多种默认配置,例如极速模式,这个模式下,会帮助你在设定好的临界值区间上,结束空进程以及内容供应节点等等低优先级保留权的进程,来给你腾出更多的内存,加速新运行程序打开的速度,但是它也说明了这种模式的弊端,就是一些可能你不想被关闭的进程会被过早的关闭,比如说,闹钟----在G2G3还很火爆的2009年,很多用户在买完手机后给我抱怨,哎呀这个机器闹钟怎么老不响啊...上班老迟到...其实这就是因为手动结束进程的时候结果把闹钟也给干掉了.系统的时间是会一直走的,这属于主要服务,而闹钟呢,只是主要服务的一个附属品,所以被结束后,是不会自动被启动的,既然没有启动自然就不会响了.与此类似的例子就是里程碑不充电的BUG,这是因为Moto的机器里有个USB的进程,如果你把它结束后,理论上会重新启动的但是也会不启动,后面这种情况出现的结果就是你插充电器没反应,插数据线连电脑没反应...重启手机就好了.当然我知道大家的洁癖很多,有的人就是见不得内存值太小...好吧如果你不想一些被系统认为不太重要而你又很需要的进程被你自己亲手扼杀的话,那么我推荐你使用高级任务管理器这个程序,你可以把一些进程自动隐藏起来,也就是说当你挥起狼牙棒横扫一堆进程的时候,你设置好的几个进程是不会受任何影响的,比如桌面Launcher,比如闹钟,比如USB,等等等等.但话说回来,我是不建议大家去手动管理Android的内存,也许你会不习惯----我也没啥好劝告的,总之,不要把你的智能机想的那么笨就行了.刚才全杀掉进程后,过了一会,我的DEFY又变成剩余60M内存,还是没啥鸭梨啊...如果你感兴趣可以做个试验,内存很少的时候,你打开一个大游戏,然后退出,你会发现...
2.下面异常是属于RuntimeException的是(abcd)(多选)
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException(一般针对get操作)
解析:
当出现异常的运算条件时,抛出此异常。
例如,一个整数“除以零”时,抛出此类的一个实例。
B、IllegalArgumentException
抛出的异常表明向方法传递了一个不合法或不正确的参数。
C、NullPointerException
D、BufferUnderflowException(不明白,没碰到过)
编码问题导致java_BufferUnderflowException异常
公共类BufferUnderflowException的
延伸的RuntimeException
未经检查的异常时,抛出一个相对get操作达到源缓冲区的限制。
3.Math.round(11.5)等于多少().Math.round(-11.5)等于多少(c).
A、11,-11B、11,-12C、12,-11D、12,-12
解析:
四舍五入四和五是指正的4,5
-11.5这么看-11.5=-12+0.5,0.5按四舍五入为1,-12+1=-11,所以Math.round(-11.5)==-11
-0.5=-1+0.50.5按四舍五入为1,-1+1=0,所以Math.round(-0.5)==0
11.5四舍五入显然Math.round(11.5)==12
round方法返回与参数最接近的长整数,参数加0.5后求其floor(小于等于该数的最大整数)
4.下列程序段的输出结果是:
(b)
voidcomplicatedexpression_r(){
intx=20,y=30;
booleanb;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、trueB、falseC、1D、011.activity
解析:
&&(与)的优先级比||(或)高,所以先判断出全部&&操作的值,再进行||的判断
5.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(A):
原答案错误
A、onPause()B、onCreate()C、onResume()D、onStart()
解析:
Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
6.Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)
A、SerializableB、charsequenceC、ParcelableD、Bundle
解析:
android数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
http:
//jojol-
Android中Intent传递对象的两种方法(Serializable,Parcelable)
7.android中下列属于Intent的作用的是(c)
A、实现应用程序间的数据共享(Application之间不靠Intent,而靠ContentProvider)
B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
D、处理一个应用程序整体性的工作
8.下列属于SAX解析xml文件的优点的是(b)
A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能(dom解析优点)
B、不用事先调入整个文档,占用资源少(sax解析优点)
C、整个文档调入内存,浪费时间和空间(dom解析缺点)
D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失
(sax解析缺点)
解析:
不需要像dom解析那样在内存中建立一个dom对象,占用内存,sax解析是逐行解析的,每次读入内存的只是一行xml,所以速度快,效率高点。
不过sax一般是处理固定格式的xml。
9.下面的对自定style的方式正确的是(a)
A、
layout_width">fill_parent B、 layout_width">fill_parent(没有 C、 layout_width">fill_parent(没有) D、 layout_width">fill_parent(应为) 10.在android中使用Menu时可能需要重写的方法有(ac)。 (多选) A、onCreateOptionsMenu() B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected() 解析: //当客户点击MENU按钮的时候,调用该方法 @Override publicbooleanonCreateOptionsMenu(Menumenu){ menu.add(0,1,1,R.string.exit); menu.add(0,2,2,R.string.about); returnsuper.onCreateOptionsMenu(menu); } //当客户点击菜单当中的某一个选项时,会调用该方法 @Override publicbooleanonOptionsItemSelected(MenuItemitem){ if(item.getItemId()==1){ finish(); } returnsuper.onOptionsItemSelected(item); } 共有: onMenuOpened,onMenuItemSelected,onCreateOptionsMenu, onOptionsItemSelected,onOptionsMenuClosed,onCreateContextMenu, onContextItemSelected,onContextMenuClosed,onCreatePanelMenu 11.在SQLServerManagementStudio中运行下列T-SQL语句,其输出值(c)。 SELECT@@IDENTITY A、可能为0.1 B、可能为3 C、不可能为-100 D、肯定为0 解析: @@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。 一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。 比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select@@identity得到的值就是101。 使用@@identity的前提是在进行insert操作后,执行select@@identity的时候连接没有关闭,否则得到的将是NULL值(因为他是变量,只存在于这次连接中,连接关闭后,变量清空)。 12.在SQLServer2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之后的结果是(d)。 BEGINTRANSACTIONA UpdateSALESSetqty=30WHEREqty<30 BEGINTRANSACTIONB UpdateSALESSetqty=40WHEREqty<40 UpdateSALESSetqty=50WHEREqty<50 UpdateSALESSetqty=60WHEREqty<60 COMMITTRANSACTIONB COMMITTRANSACTIONA A、SALES表中qty列最小值大于等于30 B、SALES表中qty列最小值大于等于40 C、SALES表中qty列的数据全部为50 D、SALES表中qty列最小值大于等于60 解析: UpdateSALESSetqty=60WHEREqty<60(关键在最后一句,执行完数据就都是大于等于60了) 13.在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab) A、getWriteableDatabase() B、getReadableDatabase() C、getDatabase() D、getAbleDatabase() 解析: SQLiteDatabasedb=NewSQLiteOpenHelper(this.getContext(),”my.db”,null,1) .getWriteableDatabase()或.getReadableDatabase() 14.android关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题) A、当第一次启动的时候先后调用onCreate()和onStart()方法 B、当第一次启动的时候只会调用onCreate()方法 C、如果service已经启动,将先后调用onCreate()和onStart()方法 D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法 15.下面是属于GLSurFaceView特性的是(abc)(多选) A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图 view上。 B、管理一个EGLdisplay,它能让opengl把内容渲染到上述的surface上。 C、让渲染器在独立的线程里运作,和UI线程分离。 (子线程向主线程传递数据) D、可以直接从内存或者DMA等硬件接口取得图像数据 解析: android.opengl.GLSurfaceView概述 GLSurfaceView是一个视图,继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。 GLSurfaceView提供了下列特性: 1>管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。 2>管理一个EGLdisplay,它能让opengl把内容渲染到上述的surface上。 3>用户自定义渲染器(render)。 4>让渲染器在独立的线程里运作,和UI线程分离。 5>支持按需渲染(on-demand)和连续渲染(continuous)。 6>一些可选工具,如调试。 16.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的(a) A、 name="NewBroad"> android: name="android.provider.action.NewBroad"/> B、 name="NewBroad"> android: name="android.provider.action.NewBroad"/> C、 name="NewBroad"> android: name="android.provider.action.NewBroad"/> D、 name="NewBroad"> android: name="android.provider.action.NewBroad"/> 17.关于ContenValues类说法正确的是(a) A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是String类型,而值都是基本类型 B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是任意类型,而值都是基本类型 C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名,可以为空,而值都是String类型 D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中 的名是String类型,而值也是String类型 18.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(a) A、onDestroy() B、onClear() C、onFinish() D、onStop() 19.下面退出Activity错误的方法是(c) A、finish() B、抛异常强制退出 C、System.exit()System.exit(0)0是正常退出 其他数字是表示不正常退出 D、onStop() 20.下面属于android的动画分类的有(ab)(多项) A、TweenB、FrameC、DrawD、Animation 解析: Android动画模式 Animation主要有两种动画模式: 一种是tweenedanimation(渐变动画) XML中 JavaCode alpha AlphaAnimation scale ScaleAnimation 一种是framebyframe(画面转换动画) XML中 JavaCode translate TranslateAnimation rotate RotateAnimation 21.下面关于Androiddvm的进程和Linux的进程,应用程序的进程说法正确的是(d) A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念. B、DVM指dalivk的虚拟机
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 71题回答题和概念题为主分析 71 回答 概念 题为 分析