现在的位置: 首页 > 综合 > 正文

Android面试题__2013_07_25

2013年12月02日 ⁄ 综合 ⁄ 共 6411字 ⁄ 字号 评论关闭

今晚在复习Android基础的时候,找到了一些很有价值的基础知识,分享给给位Android的开发者。这些是基础知识,同时也可以当做面试准备。面试题其实是很好的基础知识学习,有空会好好整理相关基础知识。

1.Activity的生命周期

方法
描述
可被杀死
下一个
在activity第一次被创建的时候调用。这里是你做所有初始化设置的地方──创建视图、设置布局、绑定数据至列表等。如果曾经有状态记录(参阅后述Saving
Activity State
。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数。
总继之以onStart()。
onStart()
   
在activity停止后onStop(),在再次启动之前被调用。
总继之以onStart()。
onStart()
当activity正要变得为用户所见时被调用。
当activity转向前台时继以onResume(),在activity变为隐藏时继以onStop()。
onResume()  or onStop()
   
在activity开始与用户进行交互之前被调用。此时activity位于堆栈顶部,并接受用户输入。
继之以onPause()。
onPause()
当系统将要启动另一个activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个activity必须等到此方法返回后才会继续。
当activity重新回到前台是继以onResume()。当activity变为用户不可见时继以onStop()。
onResume()  or onStop()
当activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个activity(可能是现存的或者是新的)回到运行状态并覆盖了它。
如果activity再次回到前台跟用户交互则继以onRestart(),如果关闭activity则继以onDestroy()。
onRestart()  or onDestroy()
在activity销毁前调用。这是activity接收的最后一个调用。这可能发生在activity结束(调用了它的 finish() 方法)或者因为系统需要空间所以临时的销毁了此acitivity的实例时。你可以用isFinishing() 方法来区分这两种情况。
nothing

1、onCreate():当Activity被创建的时候调用(第一次)。操作:设置布局文件,初始化视图,绑定数据文件等。

2、onStart():当Activity能被我们看到的时候。

3、onResume():当Activity获得用户的焦点的时候,就是能被用户操作的时候。

4、onPause()[pause暂停的意思]:Activity暂停。应用程序启动了另一个Activity的时候。例子:来了一个电话,系统启动了电话Activity。在这个函数里要做的就是把Activity的数据保存起来,当接完电话的时候,再把这些数据读出来,把原来的Activity还原出来。

5、onstop():当第二个Activity把第一个Activity完全遮挡住了的时候。对话框并没有把原来的Activity完全遮挡起来,不会调用。

6、onDestroy():销毁Activity。1)调用了finish()方法。2)系统资源不够用了。

函数调用过程:

启动第一个Activity的时候:

第一次创建onCreate()-->Activity可见了onStart()-->Activity可以操作了onResume()。

点击第一个Activity上的按钮通过Intent跳到第二个Activity:

第一个Activity暂停onPause()-->创建第二个ActivityonCreate()-->Activity可见onStart()-->Activity可操作onResume()-->第一个Activity被第二个Activity完全遮盖onStop()(如果调用了finish(),或者系统资源紧缺,则会被销毁onDestory())。

点击系统返回功能建,从第二个Activity回到第一个Activity :

第二个Activity暂停onPause()-->第一个Activity重启动OnRestart()(并没有被销毁,如果销毁了则要创建onCreate())-->第一个Activity可见onStart()-->第一个Activity可操作onResume()-->第二个Activity被完全遮盖onStop()(如果调用了finish(),或者系统资源紧缺,则会被销毁onDestory())。

1344619041_9207.jpg

2.横竖屏切换时候activity的生命周期

1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次. 

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

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

3.android中的动画有哪几类,它们的特点和区别是什么?

Android提供两种创建简单动画的机制:tweened animation(补间动画) 和 frame-by-frame animation(帧动画).

  • tweened animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果
  • frame-by-frame animation:顺序播放事先做好的图像,跟电影类似

这两种动画类型都能在任何View对象中使用,用来提供简单的旋转计时器,activity图标及其他有用的UI元素。Tweened animation被andorid.view.animation包所操作;frame-by-frame
animation被android.graphics.drawable.AnimationDrawable类所操作。

想了解更多关于创建tweened和frame-by-frame动画的信息,读一下Dev Guide-Graphics-2D Graphics里面相关部分的讨论。

Animation 是以 XML格式定义的,定义好的XML文件存放在res/anim中。由于Tween Animation与Frame-by-frame Animation的定义、使用都有很大的差异,我们将分开介绍,本篇幅中主要介绍Tween
Animation的定义与使用。按照XML文档的结构【父节点,子节点,属性】来介绍Tween Animation,其由4种类型:

  • Alpha: 渐变透明度动画效果
  • Scale:渐变尺寸伸缩动画效果
  • Translate:画面转换位置移动动画效果
  • Rotate: 画面转换角度移动动画效果

在介绍以上4种 类型前,先介绍Tween Animation共同的节点属性。

表一
属性[类型] 功能
Duration[long] 属性为动画持续时间 时间以毫秒为单位
fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用
fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用
interpolator
指定一个动画的插入器 有一些常见的插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果
repeatCount[int] 动画的重复次数
RepeatMode[int] 定义重复的行为 1:重新开始  2:plays backward
startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变 1:保持在最上层 -1:保持在最下层

下面我们开始结 合具体的例子,分别介绍4种类型各自特有的节点元素。

表二
XML节点 功能说明
alpha 渐变透明度动画效果
<alpha android:fromAlpha=”0.1″ android:toAlpha=”1.0″ android:duration=”3000″ />
fromAlpha
属性为动画起始时透明度
0.0表示完全不透明 1.0表示完全透明 以上值取0.0-1.0之间的float数据类型的数字
toAlpha 属性为动画结束时透明度
表三
scale 渐变尺寸伸缩动画效果
<scale android:interpolator= “@android:anim/accelerate_decelerate_interpolator” android:fromXScale=”0.0″ android:toXScale=”1.4″ android:fromYScale=”0.0″ android:toYScale=”1.4″
android:pivotX=”50%” android:pivotY=”50%” android:fillAfter=”false” android:startOffset=“700” android:duration=”700″ android:repeatCount=”10″ />
fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大
toXScale [float] toYScale[float] 为动画结束时,X、Y坐标上的伸缩尺寸
pivotX[float] pivotY[float] 为动画相对于物件的X、Y坐标的开始位置 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
表四
translate 画面转换位置移动动画效果
<translate android:fromXDelta=”30″ android:toXDelta=”-80″ android:fromYDelta=”30″ android:toYDelta=”300″ android:duration=”2000″ />
fromXDelta toXDelta 为动画、结束起始时 X坐标上的位置
fromYDelta toYDelta 为动画、结束起始时 Y坐标上的位置
表五
rotate 画面转移旋转动画效果
<rotate android:interpolator=”@android:anim/accelerate_decelerate_interpolator” android:fromDegrees=”0″ android:toDegrees=”+350″ android:pivotX=”50%” android:pivotY=”50%”
android:duration=”3000″ />
fromDegrees 为动画起始时物件的角度 说明 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转)
toDegrees
为动画结束时物 件旋转的角度 可以大于360度
pivotX pivotY 为动画相对于物件的X、Y坐标的开始位置 说明:以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置

Android SDK提供了基类:Animation,包含大量的set/getXXXX()函数来设置、读取Animation的属性,也就是前面表一中显示的各种属性。Tween Animation由4种类型:alpha、scale、translate、roate,在Android
SDK中提供了相应的类,Animation类派生出了AlphaAnimation、ScaleAnimation、 TranslateAnimation、RotateAnimation分别实现了 改变 Alpha值 、 伸缩 、 平移 、 旋转 等动画,每个子类都在父类的基础上增加了各自独有的属性。

(补充)

     Android的动画效果分为两种,一种是tweened animation(补间动画),第二种是frame by frame animation。一般我们用的是第一种。补间动画又分为AlphaAnimation,透明度转换  RotateAnimation,旋转转换  ScaleAnimation,缩放转换  TranslateAnimation
位置转换(移动)。 动画效果在anim目录下的xml文件中定义,在程序中用AnimationUtils.loadAnimation(Context context,int ResourcesId)载入成Animation对象,在需要显示动画效果时,执行需要动画的View的startAnimation方法,传入Animation,即可。切换Activity也可以应用动画效果,在startActivity方法后,执行overridePendingTransition方法,两个参数分别是切换前的动画效果,切换后的动画效果

4. 一条最长的短信息约占多少byte?

  中文70(包括标点),英文160个字节。

5.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。

6.什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

  嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、 军事设备、
航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

7.android中线程与线程,进程与进程之间如何通信

1、一个 Android 程序开始运行时,会单独启动一个Process。    默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。    默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。
2、一个 Android 程序开始运行

抱歉!评论已关闭.