您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > android初学面试题
1.请描述下Activity的生命周期。2.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?3.如何将一个Activity设置成窗口的样式。(EditedbySodino)4.如何退出Activity?如何安全退出已调用多个Activity的Application?5.请介绍下Android中常用的五种布局。6.请介绍下Android的数据存储方式。(EditedbySodino)7.请介绍下ContentProvider是如何实现数据共享的。(EditedbySodino)8.如何启用Service,如何停用Service。(EditedbySodino)9.注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。10.请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。11.AIDL的全称是什么?如何工作?能处理哪些类型的数据?12.请解释下Android程序运行时权限与文件系统权限的区别。(EditedbySodino)13.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。14.有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。15.你如何评价Android系统?优缺点。1.请描述下Activity的生命周期详细介绍一下这几个方法中系统在做什么以及我们应该做什么:onCreate:在这里创建界面,做一些数据的初始化工作onStart:到这一步变成用户可见不可交互的onResume:变成和用户可交互的,(在activity栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动onstop:变得不可见,被下一个activity覆盖了onDestroy:这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个ProgressDialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。onPause,onstop,onDestroy,三种状态下activity都有可能被系统干掉为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库)。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android的消息机制[Handler,Message]来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。2.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?当你的程序中某一个ActivityA在运行时中,主动或被动地运行另一个新的ActivityB这个时候A会执行Java代码1.public2.voidonSaveInstanceState(BundleoutState){3.super.onSaveInstanceState(outState);4.outState.putLong(id,1234567890);5.}6.7.publicvoidonSaveInstanceState(BundleoutState){super.onSaveInstanceState(outState);outState.putLong(id,1234567890);}8.B完成以后又会来找A,这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume就好了。savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。Java代码if(savedInstanceState!=null){longid=savedInstanceState.getLong(id);}if(savedInstanceState!=null){longid=savedInstanceState.getLong(id);}就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦,没准你需要记住滚动条的位置...3.如何将一个Activity设置成窗口的样式简单你只需要设置一下Activity的主题就可以了在AndroidManifest.xml中定义Activity的地方一句话:Xml代码1.android:theme=@android:style/Theme.Dialog2.3.android:theme=@android:style/Theme.Dialog4.这就使你的应用程序变成对话框的形式弹出来了,或者Xml代码1.android:theme=@android:style/Theme.Translucent2.3.android:theme=@android:style/Theme.Translucent4.就变成半透明的,[友情提示-.-]类似的这种activity的属性可以在android.R.styleable类的AndroidManifestActivity方法中看到,AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类android.R.styleable上面说的是属性名称,具体有什么值是在android.R.style中可以看到,比如这个@android:style/Theme.Dialog就对应于android.R.style.Theme_Dialog,('_'换成'.'--注意:这个是文章内容不是笑脸)就可以用在描述文件中了,找找类定义和描述文件中的对应关系就都明白了。4.如何退出Activity对于单一Activity的应用来说,退出很简单,直接finish()即可。当然,也可以用killProcess()和System.exit()这样的方法。现提供几个方法,供参考:1、抛异常强制退出:该方法通过抛异常,使程序ForceClose。验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。2、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。3、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。4、递归退出在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。但是这样做同样不完美。你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。但至少,我们的目的达到了,而且没有影响用户使用。为了编程方便,最好定义一个Activity基类,处理这些共通问题。5.请介绍下Android中常用的五种布局Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout(线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。一、FrameLayout这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。二、LinearLayout线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局(android:orientation=vertical)和水平布局(android:orientation=horizontal)。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。linearLayout中有一个重要的属性android:layout_weight=1,这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。三、AbsoluteLayout绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x=20pxandroid:layout_y=12px这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。四、RelativeLayout相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below=@id/aaa该元素在id为aaa的下面android:layout_toLeftOf=@id/bbb改元素的左边是bbb相对于父元素的地方android:layout_alignParentLeft=true在父元素左对齐android:layout_alignParentRight=true在父元素右对齐还可以指定边距等,具体详见API五。TableLayout表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式android:gravity=。每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。6.请介绍下Android的数据存储方式Android提供了5种方式存储数据:--使用SharedPreferences存储数据;--文件存储数据;--SQLite数据库存储数据;--使用ContentProvider存储数据;--网络存储数据;先说下,Preference,File,DataBase这三种方式分别对应的目录是/data/data/PackageName/Shared_Pref,/data/data/PackageName/files,/data/data/PackageName/database。在Android中通常使用File存储方式是用Context.openFileOutput(StringfileName,intm
本文标题:android初学面试题
链接地址:https://www.777doc.com/doc-5893851 .html