android面试不得不喝的鸡汤

android面试不得不喝的鸡汤

———作为万千android求职菜鸟的小石头,参考了诸多文章,找到了一些android面试问到的一些常见问题,在此我做了一下总结,肯定有疏漏或对android知识理解的不到位的地方,希望各种大神和小神们能给个评论,我会做进一步的修改和补充。下面就是我见到的问题。

  • activity、 view 、 windows的区别和联系

  • LaunchMode 的使用场景

  • view 的绘制流程

  • *Touch事件分发机制

  • Android动画的原理

  • 对Handler ,looper,MessageQueue 的理解

  • android跨进程通讯的方式

  • Binder的理解

  • process(进程) and thread(线程)

  • Android Mashup的设计方式的理解


—–接下来我对以上相关问题做了自己的答案,真心的希望广大高手能给出意见和建议,让我的这份答卷能答60分。

activity、 view 、 windows的区别和联系

——–Activity 可以说是应用程序的载体(也可以理解为界面的载体,但是不界面),用户能够在上面绘制界面(Activity本身不绘制界面),并提供用户处理事件的API,维护应用程序的生命周期(Android应用程序是由多个 Activity 堆积而成,而各个 Activity 又有其独立的生命周期)。负责绘制界面的工作是由windows来处理的。view自然就是我们经常用到的button 、textview、imageview.、layout..的控件和布局了。
该文章解释的比较好,链接为:activity、window、 view的联系

LaunchMode 的使用场景

——–Activity的启动模式launchMode包括:standard模式、 singleTop模式 singleTask模式 、singleInstance模式。standard模式是默认的模式,singleInstance模式不常用到,就不在做说明。
——–singleTop模式 :如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。
——–singleTask模式:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
下面我们总结一下使用场景:
singleTop适合接收通知启动的内容显示页面。

例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。

singleTask适合作为程序入口点。

例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

singleInstance适合需要与程序分离开的页面。

例如闹铃提醒,将闹铃提醒与闹铃设置分离。

singleInstance不要用于中间页面,如果用于中间页面, 跳转会有问题 ,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
——–文章链接:LaunchMode的使用场景

view 的绘制流程

——–view的绘制经过一下几个方法:Measure、Layout、Draw具体的绘制流程请大家自行总结,多多练习。该链接就讲解的非常好:view的绘制流程

4、Touch事件分发机制

android对Touch Event的分发逻辑是View从上层分发到下层(dispatchTouchEvent函数)类似于隧道方式,然后下层优先开始处理Event(先 mOnTouchListener,再onTouchEvent)并向上返回处理情况(boolean值),若返回true,则上层不再处理。类似于冒泡 方式 ,对Touch事件分发要是能有较深的了解的,不得不知道以下这3个事件:onInterceptTouchEvent事件、onTouchEvent()事件、dispatchTouchEvent()事件。
dispatchTouchEvent(): 这个方法用来分发TouchEvent
onInterceptTouchEvent():这个方法用来拦截TouchEvent
onTouchEvent():这个方法用来处理TouchEvent
假设一个事件的传递过程为:activity -> ViewGroup1 -> ViewGroup1的直接子ViewGroup –> ×××××× -> 叶子View,默认情况,一个消息最后只需要一个人处理,其它消息途径者都只是干了中转的效果,消息传递途径的三级处理机制:①接受上级消息(dispatchTouchEvent)②决策向下级分发还是自身处理(onInterceptTouchEvent)③自身处理逻辑(onTouchEvent、onTouch 、onClick 、onLongClick 等)
———-OnTouchListener onTouch onTouchEvent 的区别:
首先执行OnTouchListener()中的onTouch,然后执行重写的onTouchEvent(MotionEvent event)。(注:在return不为true的情况下)
onTouch() is used by users of the View to get touch events while onTouchEvent() is used by derived classes of the View to get touch events.
消息处理中, return true 表示消息被完整地处理完成了,后面不用再用其他事件处理了。
———-解释的比较好的网址链接为:touch事件的分发机制

5、Android动画的原理

Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,类似幻灯片。代码实现的例子为:

  Animation anim=null;   
  anim=new RotateAnimation(0.0f,+360.0f);   
  anim.setInterpolator(new AccelerateDecelerateInterpolator());   
  anim.setDuration(3000);   
  findViewById(R.id.TextView01).startAnimation(anim); 

android动画的原理好复杂的样子,具体的链接网址为android动画原理

6、对Handler ,looper,MessageQueue 的理解

——–Handler 的作用:发送消息和处理消息,handler发送的消息必须发送到指定的MessageQueue,而MessageQueue是由Looper负责管理的,也就是说当前线程必须有一个Looper对象。在Looper的构造方法中包含MessageQueue的建立。
保证当前线程中有Looper对象有两种方法:
在主UI线程中,系统初始化了一个Looper对象,因此直接创建Handler即可;
在子线程中,需要自己创建一个Looper对象,并且启动它 Looper.prepare()方法 和 Looper.loop()方法。
——–感觉足够了,以上也是我从疯狂android讲义中提取到的,简单明了。如果有想了解更详细的解释,请多多练习,这里是比较详细的链接网址:handler looper 的理解

7、android跨进程通讯的方式

———activity可以跨进程调用其他应用程序的Activity;Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然,也可以对其他应用程序的数据进行增、删、改操 作;Broadcast可以向android系统中所有应用程序发送广播,而需要跨进程通讯的应用程序可以监听这些广播;Service和Content Provider类似,也可以访问其他应用程序中的数据,但不同的是,Content Provider返回的是Cursor对象,而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务。该文章解释的就很不错,android跨进程通讯的4中方式

8、Binder的理解

直接给链接吧,bander就知道service里用到了IBander,Binner的理解

19、process(进程) and thread(线程)

默认情况下,同一个应用程序内的所有组件都是运行在同一个进程中的,大部分应用程序也不会去改变它,也就是说一个应用的开启对应一个进程,而一个Thread可以看做是该进程中的一个实例。对于特殊需求的应用需要开启多个进程。线程就是我们在开发中经常用到的UI线程和new 出来的子线程。对于进程的重要级别,进程间的通讯,请查看api官网:process和thread官方文档介绍

10、Android Mashup的设计方式的理解*

谁知道能留个言,求介绍比较好的文章学习下,日后必有重谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯哥666

谢谢老板鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值