面试知识点总结之Android

1. Activity的四种启动方式

设置:在AndroidManifest.xml中<activity>标签设置android:launchMode属性

  • standard:默认模式,默认创建一个新的实例
  • singleTop:栈顶复用模式,若启动的Activity已位于栈顶,不会重新创建,而调用其onNewIntent方法(适合接收通知启动的内容显示页面,如新闻内容页面)
  • singleTask:栈内复用模式,若存在会将其上的其他Activity销毁并调用onNewIntent(作为程序入口点,如浏览器主界面)
  • singleInstance:单实例模式,会单独位于一个任务栈中(适合与程序分离的页面,如闹铃提醒)

2. Android消息机制

(1)Looper.prepare()在本线程中保存一个Looper实例,其中保存一个MessageQueue对象
(2)Looper.loop()会让当前线程进入一个无限循环,不断从MessageQueue中读取消息,回调msg.target.dispatchMessage(msg)方法
(3)Handler的构造方法会得到当前线程中的Looper实例,进而关联其中的MessageQueue
(4)Handler的sendMessage()方法会将msg.target赋值为handler自身,再加入MessageQueue中
(5)构造Handler实例时我们会重写handleMessage()方法,即msg.target.dispatchMessage(msg)最终调用的方法

3. Service和IntentService的区别

Service:当应用程序被挂到后台时,为保证某些组件仍可工作而引入了service,它依赖于应用程序的主线程,耗时逻辑和操作会引起ANR
IntentService:继承于Service,在onCreate时内部开启了一个线程执行耗时操作,完成后会清理线程并关闭服务。
(1)创建了一个独立的工作线程来处理所有传递给服务的intents(通过onStartCommand()
(2)创建了一个工作队列,逐个发送intent给onHandleIntent()
(3)无需主动调用stopSelf()来结束服务,所有intent处理完后会自动关闭服务
(4)默认实现的onBind()返回null
(5)默认实现的onStartCommand()的目的是将intent插入到工作队列中

4. 自定义view的几种方式

(1)组合空间:讲几个控件组合成为新的控件,如自定义标题栏
(2)自绘控件:继承View重写onDraw()方法,用于实现一些不规则的效果
(3)继承控件:继承已有的控件,扩展其功能

5. Android动画的几种方式

(1)视图动画:也叫Tween补间动画,可在一个视图容器内执行一系列简单变换(位置、大小、旋转、透明度等),使用插值器Interpolator改变动画播放速率

  • ScaleAnimation 缩放动画
  • TranslateAnimation 位移动画
  • RotateAnimation旋转动画
  • AlphaAnimation 透明度动画

(2)帧动画AnimationDrawable:通过多张Drawable实现像幻灯片一样的效果

<animation-list>
	<item
		android-drawable="mipmap/pic"
		android-duration="500"/>
<animation-list>

(3)属性动画:修改控件的属性实现的动画

  • ValueAnimator:一个特定时间内执行一个动画
  • TimeAnimator:时序监听回调工具
  • ObjectAnimator:一个对象的一个属性动画
  • AnimatorSet:动画集合

6. 进程间通信方式

(1)Bundle:四大组件间传递数据
(2)文件共享:适用并发程度不高,实时性要求不高,如缓存共享
(3) AIDL:远程服务跨进程通信的一种方式
(4)Messenger:通过message进行传输,低并发的一对多及时通信
(5)ContentProvider:一对多的进程间数据共享
(6)Socket:网络数据交换

7. 线程间通信方式

(1)共享内存(变量)
(2)文件、数据库
(3)Handler
(4)Java中的wait()notify(),notifyAll()

8. 更新UI的几种方式

(1)runOnUiThread(Runnable)
(2)View.post(Runnalbe)/new Handler.post(Runnable)
(3)使用Handler
(4)使用AsyncTask

9. 序列化相关,如何序列化,为什么要序列化

  • 序列化的目的
    (1)永久保存对象数据(保存于文件中等)
    (2)将对象数据在网络上传输(对象数据转换为字节流)
    (3)将对象数据在进程间传递(intent.putExtra("name", user), budle.putSerializable("name", user))

  • 如何序列化
    (1)实现Serializable接口,声明即可。
    指定一个serialVersionUID用于辅助序列化和反序列化
    (2)实现Parcelable接口,声明+实现内部相应方法

10. 触摸事件传递流程

传递:Activity→ViewGroup→View
处理:View→ViewGroup→Activity
在未重写任何方法的情况下,触摸事件的派遣将不会被截断,自上而下派遣到叶子View,调用该View的onTouchEvent()(若注册了监听器,则优先调用onTouchListener.onTouch(),返回false才会调用onTouchEvent())。如果该View不能处理事件(onTouchEvent()返回false),其父视图继续尝试处理,直到最后调用Activity的onTouchEvent()方法。

11.数据持久化

(1)文件存储
(2)SharedPreferences存储
(3)SQLite数据库存储

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值