android面试题(一)

1、说说你对Android四大应用组件的理解 ?

1)Activity:活动
(1)描述:
    提供能与用户进行交互的页面
(2)主要工作
    加载布局
    为视图设置监听,在监听回调中完成工作
    利用Activity的生命周期回调方法做一些特定的工作
(3)重要知识点
    a. 生命周期
        onCreate()
        onStart()
        onResume()
        onPause()
        onRestart()
        onStop()
        onDestory()
    b. 任务栈
        在Android中,系统用Task Stack (Back Stack)结构来存储管理启动的Activity对象
        一个应用启动,系统就会为其创建一个对应的Task Stack来存储并管理该应用的Activity对象
    c. 启动模式
        standard
            标准模式,每次调用startActivity()方法就会产生一个新的实例
        singleTop
            如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例;如果不位于栈顶,会产生一个新的实例
        singleTask
            只有一个实例, 默认在当前Task中
        singleInstance
            只有一个实例, 创建时会新建一个栈, 且此栈中不能有其它对象
    d. Activity的启动和停止
        启动
            一般启动
                startActivity(Intent intent)
            带回调的启动
                startActivityForResult(int reqCode, Intent intent)
                 onActivityResult(int reqCode, int resultCode, Intent data)
        停止
            一般结束
                finish()
            带结果的结束
                setResult(int resultCode, Intent data)
                finish()

2)Service:服务
(1)描述:
后台为应用做一些时间跨度比较大的任务 长时间的任务
(2)区别
a. Service与Activity
1. Activity:
Activity对应一个界面
应用退出, Activity对象就会死亡
应用再次进入, 启动的Activity对象是重新创建的
2. Service
不与任何界面关联
应用退出, Service仍在运行
应用再次进入, 启动的Service还是前面运行的Service对象
b. Service与Thread
1. Service
用来在后台完成一个时间跨度比较大的工作的应用组件
Service的生命周期方法运行在主线程, 如果Service想做持续时间比较长的工作, 需要启动一个分线程(Thread)
应用退出: Service不会停止
应用再次进入: 可以与正在运行的Service进行通信
2. Thread
用来开启一个分线程的类, 做一个长时间的工作
Thread对象的run()在分线程执行
应用退出: Thread不会停止,
应用再次进入: 不能再控制前面启动的Thread对象
(3)重要知识点
Service生命周期
onCreate()
onStartCommand()
onBind()
onUnbind()
onDestroy()

3)BroadcastReceiver:广播接收器
(1)描述
广播机制是Android中实现不同应用间(进程间)通信的一种手段(应用级的事件机制)
(2)重要知识点
a. 区别注册接收器的两种方式
方式一: 配置文件注册(静态注册)
方式二: 硬编码注册(动态注册)
b.区别一般广播与有序广播
一般广播
发送
context.sendBroadCast(Intent intent)
多人接收时是否有序
无序、都会同时执行
是否可以中断
不可以
有序广播
发送
context.sendOrderedBroadcast(Intent intent)
多人接收时是否有序
有序,根据优先级和注册先后依次执行
是否可以中断
可以, 通过br.abortBroadcast()
中断后, 后面的接收器不能接收到此广播了
c. 常见的广播
收到短信广播
开机完成广播
应用被卸载广播
手机锁屏
手机开屏

4)ContentProvider:内容提供者
(1)描述
用来将当前应用表数据的操作暴露给其它应用
(2)重要知识点
a. 为什么要用ContentProvider?
一个应用需要访问另一个应用的数据库表数据
b. ContentResolver, ContentProvider与ContentObsolver的关系
ContentProvider : 内容提供者类
ContentResolver: 内容提供者的解析类
ContentObsolver:
可以理解成android系统包装好的回调,数据发送变化时,会执行回调中的方法;
ContentResolver发送通知,ContentObserver监听通知;
当A的数据发生变化的时候,A就会显示的通知一个内容观察者,不指定观察者,就会发消息给一个路径

2、 说出6种以上常见的View的子类 5

1)view
    ImageView
    ProgressBar
        RatingBar
        SeekBar
    SurfaceView
        VideoView
    TextView
        Button
            CheckBox
            RadioButton
    EditText
2)ViewGroup
    GridView
    ListView
    FrameLayout
    ScrollView
    LinearLayout
    RadioGroup
    SlidingDrawer
    ViewPager

3、分析Android消息机制的原理(图 + 原理分析)
图片
这里写图片描述

4、异步任务的运行流程及优点
1)流程
这里写图片描述
2)优点
AsyncTask是对Handler和Thread的封装, 使用它更编码更简洁,更高效
AsyncTask封装了ThreadPool, 比直接使用Thread效率要高

5、说说Android中的数据存储方式及特点
1)SP存储
* 1.保存都是键值对特点的数据
* 2.可以保存的变量的类型:boolean float int long String
* 3.数据整体都保存在 xml文件中
* 4.数据随着应用的卸载被删除
5.在data/data/应用程序包名/路径下的文件,默认都是私有的。只能被当前应用访问。
2)数据库
存储路径:data/data/应用包名/databases/….db
存储的数据,其数据关系更复杂。
随着应用的卸载而被删除
3)ContentProvider
4)网络服务器
获取数据的一种方式。
不会随着应用的卸载被删除。
5)手机内部和外部
内部
* 1.存储的路径:data/data/应用程序包名/files/xxx.xx
* 2.保存的是具体后缀格式的文件。比如:.mp3 , . txt, .png ,….
* 3.只要不超过内部文件存储的空间即可。也就是文件的大小实际上是没有限制。
* 4.数据会随着应用的卸载被删除
* 5.在data/data/应用程序包名/路径下的文件,默认都是私有的。只能被当前应用访问。
外部
* 路径1:storage/ sdcard/Android/data/应用包名/files/xxx.xxx
* 路径2:storage/ sdcard/xxx
* 1.路径1,路径2:可以存储任意格式的文件
* 2.路径1,路径2:文件的大小只要不超过 sd卡的存储范围即可
* 3.路径1,路径2:存储的数据可以被其它应用读取。
* 4.路径1:随着应用的卸载会删除
* 路径2:不会随着应用的卸载被删除
6. 说说ListView的优化点及好处
第一层面:复用convertView。不用在内存中创建过多的View对象。只需要将很多的数据显示在有限个数的convertView上即可。效率更高。
第二层面:使用ViewHolder。避免过多次的调用findViewById();
第三层面:使用图片的三级缓存技术。通过缓存,访问已访问的数据更快,同时节省流量
第四层面:使用分页。避免一次联网,下载过多数据

7. 说说你对Json数组、Json对象的理解和解析技术

1)整体结构
    Json数组:[]
        [value1,value2,value3]
    Json对象:{}
        {key1:value1, key2:value2, key3:value3}
2)数据类型
    key的数据类型
        字符串
    value的数据类型
        数值
        字符串
        null
        json数组[]
        json对象{}
3)解析技术
    Android原生API:编程相对麻烦
    GSON、FastJson框架:编码简洁,项目首选
4)解析方向
    将java对象(包含集合)转换为json格式字符串(服务器)
    将json格式字符串转换为java对象(包含集合)

8. 什么是三级缓存,如何实现图片三级缓存?


1)什么是三级缓存?
        一级:
内存中的缓存图片对象(Bitmap),用Map<url, Bitmap>
        二级:
            手机sd卡的files或手机内部的files中缓存图片文件(xxx.jpg/png)
        三级:
            服务器端保存图片文件
    2)如何应用三级缓存?
        例如:如何根据url显示图片?
        (1) 根据url从一级缓存(Map<url, Bitmap>)中取图片对象,如果取到了,直接显示
        (2) 如果没有,根据url中包含图片名称(文件名),手机的sd卡或手机内部,找对应图片加载成bitmap,如果找到了,显示并保存到一级缓存
        (3) 如果没有,显示一个默认的图片,根据url联网请求获取bitmap
            如果没有,显示一张代表错误的图片
            如果有,
                保存到一级缓存
                保存到二级缓存
                显示图片

9. 使用三级缓存存在的bug, 原因和解决办法

1)问题
    在快速滑动时,会出现显示错误图片
    图片显示后,过一会又会变为另一张图片(图片闪动)
2)原因
    在分线程加载图片的过程中,converterView已经被复用了
3)解决
    将url字符串保存到imageView对象的tag中
    在加载图片的线程开始干活前,查看imageView的tag中的url是否变化,如果变化不加载图片
    在加载到图片准备显示前,再次查看imageView的tag中的url是否变化,如果变化不显示图片

10. 列举常见的几种View动画的方式,并指出interpolator的作用
1)缩放动画(ScaleAnimation)
2)透明度动画(AlphaAnimation)
3)旋转动画(RotateAnimation)
4)平移动画(TranslateAnimation)
Interpolator被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复)

11. Service的两种启动方式对应的生命周期方法
这里写图片描述

12.Activity生命周期考查
目前处在应用的ActivityA的运行状态,现启动一个ActivityB,完全覆盖了ActivityA对应的界面,问ActivityA和ActivityB的哪些声明周期方法会调用?接着点击返回键,又有ActivityA和ActivityB的哪些声明周期方法会调用?
问题一:调用ActivityA:onPause()-onStop() 调用ActivityB:构造器-onCreate()-onStart()-Resume()
问题二:调用ActivityB:onPause()-onStop()-onDetory() 接着调用ActivityA:onRestart()-onStart()-onResume()
13请列举内存溢出和内存泄漏的例子

1)内存溢出
    1、资源释放问题:

程序代码的问题,长期保持某些资源(如Context)的引用,造成内存泄露,资源得不到释放
2、对象内存过大问题:
保存了多个耗用内存过大的对象(如Bitmap),造成内存超出限制
3、static:
static是Java中的一个关键字,当用它来修饰成员变量时,那么该变量就属于该类,而不是该类的实例。所以用static修饰的变量,它的生命周期是很长的,如果用它来引用一些资源耗费过多的实例(Context的情况最多),这时就要谨慎对待了
2)内存泄漏
比如Activity中发送了延迟消息,在onDestory中没有销毁延迟消息
比如Activity中绑定了服务,在退出Activity时没有及时解绑服务
比如Activity中动态注册了广播接收器,但在退出Activity时没有及时解注册广播接收器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值