一. 关于activity

1. 什么是activity:

就是一个用户交互界面就是一个activity

2. activity 的生命周期

onCreate ,onStart , onResume, onPause,onStop,onDestroy

3.activity 保存状态 (还有其他方法,待完善)

用Bundle来保存状态属性, putString, putInt ,

4.两个activity 之间跳转必然要执行的哪几个方法?

在界面A 中执行界面B:

[1]. A 仍然可见:onPause ,onCreate, onStart, onResume

[2]. B 不可见:onPause,onStop,onCreate,onStart,onResume

5,横竖屏切换的时候 activity 的生命周期:

[1]. 在不设置activity:configChange 的时候, 讲先摧毁首个activity, 然后在加载新的activity

[2].设置activity:configChange="orientation|keyBoardHidden|screenSize",不重新调用各自的生命周期, 执行onConfigchanged()的方法

6. 如何将activity 设置成窗口模式

android: theme = "@android:style/Theme.Dialog"

7.如何退出一个activity?如何安全的退出已调用多个activity 的application

[1].一般退出一个activity直接按返回键, 或者是通过代码实现退出activity, 或者是直接调用finish() 方法

[2].记录所有打开的activity, 遍历集合, 满足条件的关闭

[3].发送特点的广播, 接受到广播的直接调用finish()方法

[4].递归退出,

[5]启动模式  singleTask 模式, 将所有上面的activity 全部杀死

8.activity 的四种启动模式

standard: 标准模式, 每次重启 都会开启一个新的activity

singleTop:独占顶端 . 当次activity 已经在最上面的时候, 将不再重新创建新的activity

singleTask:单任务栈, 当任务栈中存在这个activity的时候 重新调用时, 会将前面的所有activity 全部杀死

singleInstance:单实例, 此activity 在任务栈中有且仅有一个

9.android 中 context, activity, application 的区别

[1]相同点:activity 和application 都是content的子类

context  是上下文的意思,是管理上下文环境中各个变量和参数的总和,方便我们可以访问到各种资源

[2]不同点:维护的生命周期不同, Context 是维护的当前activity 的生命周期, 而application 是维护的是整个工程项目的生命周期

10. 两个activity 传递数据的方式有:

[1]intent

[2]广播接受者   broadreciver

[3]内容提供者  content  provider

[4]静态数据   public startic

[5] 利用外部储存的数据  File 文件储存  shareprefrence 首选项 , Sqlite 数据库

11.Context 是什么?

[1]. 它 是描述一个应用程序环境的信息, 即上下文的意思

[2].是一个抽象类, android  提供了这个类的具体的实现类 ContextXml

[3].我们通过这个类可以获得一些应用程序的资源和类, 包括一些系统级别的操作, 例如 开启一个activity ,发送一个广播,接受一个intent 发送一个消息

二. 关于Service

1.Service 是否是在主线程中执行, service 能否执行耗时操作

service 和activity 都一样的, 都是在当前app 所在的主线程main thread 中执行的

且 service 不能执行耗时操作

2.Activity 和Service 时怎么绑定的, 启动自己的服务

bindService

3.Service 的生命周期;

[1] 非绑定式模式:

startService()>onCreate()>onStartCommand()>(关闭)>onDestory()

[2]绑定式模式

bindService()>onCreate()>onBind()>(解绑)>onUnBind()>onDestory()

4.Activity Intent Service 是什么关系

Activity 和 Service 都是android 四大组件 ,  两者都是通过Intent 来传递数据的

5.Service 中是否可以弹吐司?

弹吐司的条件是 有要context, 上下文,而本身就是Context 的子类 ,所有可以弹吐司

三.关于BroadcastReceiver

1.描述一下BroadcastRecevicer

BroadcastRecevicer 也是android 四大组件之一 ,主要是接受 系统或者app本身发出的广播

广播分为两类: 有序广播和无序广播

2.在mainfast 文件注册和通过代码注册广播

在mainfast 中注册的广播叫做静态广播,  通过代码注册的广播叫做动态广播

3.BroadcastReceiver 的生命周期

[1] broadcastreceiver 的生命周期很短暂, 在接受到广播的时候创建, 在onReceive()方法之后被摧毁

[2]不能执行耗时操作

[3]最好不要在广播接受者中创建子线程做耗时操作, 因为当onReceive方法之后, 广播进程被杀死,为空进程,线程也会被系统杀死,而出现异常

[4]耗时任务最好是放在服务里面完成

4.Android 中引入广播的机制

[1]从MVC 的角度考虑, android 的四大组件之间 都互相有依赖关系, 引入广播机制 是为了几大组件之间的信息和数据的交互

[2]程序之间可以互相通讯

[3] 设计模式----监听者模式

四.关于ContentProvider

1.ContentProvider 是如何实现数据共享的?

在Android 中, 如果想把自己应用的数据提供给第三方应用, 我们将用到ContentProvider 来实现

ContentProvider 是应用程序之间的数据交互的借口, 我们使用的时候定义一个类继承ContentProvider

类, 然后复写增删改查方法 insert query delete  update; ContentProvider 也是android 四大组件之一,

也需要在mainfast 文件中注册

2.Android 中存储数据的方式

[1]File 储存

[2]SharedPreference 首选项

[3]ContentProvider 内容提供者

[4]SQliteDataBase 轻量级数据库

[5]网络储存

3.ContentProvider 和SQL 的实现有什么差别

ContentProvider 屏蔽了数据储存的细节 ,内部实现对用户完全透明 , 用户只需要知道关系操作uri就可以了,

ContentProvider 也可以实现不同app 之间的数据共享

SQL 只能操作本应用下的数据库

4. ContentProvider , ContentObserver,ContentResolver 之间的关系

[1]ContentProvider 内容提供者  , 用于对外界提供数据的

[2]ContentResolver.notifyChange(uri)  发出消息

[3]ContentResolver  内容解析者,用于获取内容提供者的数据

[4]ContentObserver  内容监听者 , 用于监听数据改变的状态

[5]ContentResolver.registerContentObserver  注册内容监听者

五.关于ListView

1.如何提高ListView 的效率:

[1]复用contentview

[2]自定义viewhold , 用来减少findviewbyid 的次数

[3]异步加载数据  和分页加载数据

[4]使用weakrefrence  引用ImageView 对象

2.ListView 的适配器 adapter 发生变化之后, 如何更新ListView

adapter.notifyDataSetChanged() 可以会使ListView 重新绘制

3.ListView 的分页加载

[1] 设置ListView 的滚动监听:  setOnScrollListener(new OnScrollListener{....})

里面需要复写两个方法; 1.onScrollStateChanged()  2.onScroll

[2]滚动状态发生改变的时候 有三种状态:

1.手指按下移动的状态: SCROLL_STATE_TOUCH_SCROLL;//触摸滑动

2.惯性滚动(滑翔状态):SCROLL_STATE_FLING//滑翔状态

3.静止状态:SCROll_STATE_IDLE;//静止

[3]对不同的状态的处理:看静止状态下,最后一个可见的条目是否是适配器中最后一个,就可以加载更多的数据.

当滚动的数据大于总数据的时候,可以提示无数据加载

4.ListView 可以显示多种类型的条目

在adapter 里面提供了getViewTypeCount( )和getViewType( )两个方法,

在getView 方法中可以根据不同的viewType() 来加载不同类型的布局文件

5.如何在ScrollView 中嵌套 ListView (难点,还需要整理,)

6.ListView 中如何优化图片

处理图片的方法如下:

[1]不要直接拿路径去循环BitmapFactory.decodeFile; 使用options保存图片大小,千万不要加载图片到内存

[2]对图片一点要经过边界压缩   尤其是比较大的图片

[3]WeakReference , SoftReference , WeakHashMap 等来储存图片信息

[4]在getView 中图片转化的时候, 产生的中间变量一定要及时释放

异步加载图片思想:

[1]先从内存缓存中获取图片的信息

[2]获取不到的话, 从sd卡中获取图片的信息

[3]都获取不到的话, 从网络下载图片保存到SD卡 同时加载到内存并显示

六.关于Intent

1.Intent 在传递数据的时候可以传递哪些类型的数据?

intent 传递数据非常丰富, java的基本数据类型,和string 以及他们的数组形式都可以,

除此之外 还可以传递 实现了Serilizable 和Parcelable 的借口

2.Serilizable 和 Pracelable 的区别

Parcelable 类比Serilizable 的性能高,推荐使用Parcelable:

[1].Serilizable 在序列化的时候 会产生大量的临时变量, 从而引起频繁的GC

[2].Parcelable 不能使用在要将数据储存在磁盘的情况.

实现:

[1].Serilizable 的实现, 只需要继承Serilizable 即可, 这只是给对象打了一个标记,

系统会自动将其序列化

[2].Parcelable 的实现,需要在类中 添加一个静态成员变量CREATOR,这个变量需要

继承Parcelable.Creator接口.

3.描述Intent 和IntentFilter;

Android 中 用过Intent 对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的

地,还可以包含消息的内容,对于一个Intent对象,"目的地"是必须的,但内容则是可选项.

通过Intent可以实现各种系统组件的调用与激活

IntentFilter 可以理解成是一个分拣系统;由三个参数来识别:

Action 动作 view; 用户定义的一个字符串,用来描述一个Android应用程序组件

Data 数据 uri; 一个Intent 可以携带外部数据给目标组件.mimetype 属性是携带外

部数据的数据类型,scheme 指定协议.host指定位置,port端口,path路径

Category:额外的附加信息;当Intent 中包含这个列表的所有项目时Category 类别

匹配才会成功。

七. 关于Fragment

1.Fragment 和Activity 之间是如何传值的

fragment 和activity 绑定之后  在fragment 中 可以通过getAction 来获取activity 的对象;

在activity 里面可以通过findFragmentById()或findFragmentByTag 来获取fragment

2.Fragment 的生命周期

onAttach()>>onCreate()>>onCreateView()>>onActivityCreated()>>onStart()>>

onResume()>>onPause()>>onStop()>>onDestroyView()>>onDestroy()>>onDetach().

3.Fragment 的replace 和add 的区别:

Fragment 的容器是一个FragmentLayout, add 的时候是把所有的Fragment 一层一层的

叠加到FragmentLayout上去, 但是replace是先将其他的Fragment先去除掉, 然后添加新

的Fragment; 如果要达到切换的效果, 需要通过Fragment 的hide 和show方法结合使用,

将想显示出来的show,其他的hide起来, 这个过程没有生命周期的变化

4.Fragment 在实际项目中的使用:

[1] Fragment 可以分离activity成多个重用的组件,每个都有自己的生命周期和UI

[2]Fragment 可以轻松的创建动态灵活的UI设计, 可以适合与不同屏幕的尺寸

[3]Fragment 是一个独立的模块, 紧紧的跟activity 绑定在一起, 也可以动态的删除,添加,替换等等

[4]Fragment 提供一个新的方式在不同的安卓产品上面统一的UI

[5]Fragment 解决了activity 之间切换不流畅的问题, 轻量级切换

[6]Fragment 替换TabActivity 做了导航,性能更好

[7]Fragment 嵌套, 生成更好的界面效果

5. 如何切换fragment ,不重复实例化

add()方法时:add()另一个Fragment,hide()原来的, show()新的

八.Android 高级

1. 性能优化

---广义题, 根据自己实际掌握情况答

2.什么情况下导致的内存泄漏

[1]资源释放问题导致:

程序代码的问题, 长时间保持某些资源, 如:context,cursor,IO 流等引用, 资源得不到释放,就会造成内存泄漏

[2]对象内存过大导致:

保存了多个耗用过大的对象, 如Bitmap, XML等,造成内存超出限制

[3] static 关键字的使用

static 是java中的一个关键字, 当他修饰成员变量的时候, 该变量就是属于该类,而不是该类的实例对象, 生命周期变长,如果用它来修饰一些资源消耗很多的实例, 需要谨慎使用,也有可能导致内存溢出

[4]线程导致的内存泄漏

线程产生内存溢出的原因 主要在于线程生命周期不可控

3.如何避免OOM异常(OutOfMemoryError)

[1]图片过大导致的OOM, 解决办法如下:

a.等比例缩小图片,这个只是改变图片大小, 并没有彻底解决内存溢出

b.对图片进行软引用, 及时的进行recycle处理

c.使用加载图片框架处理图片,

---未完,待续--

android面试复习(自己总结的知识点,小生不才,望大能指点一二,只言片语,聊表心意)相关推荐

  1. Android面试复习资料整理

    Activity巩固和复习 1. 什么是Activity 四大组件之一,通常一个用户交互界面对应一个activity.activity是Context的子类,同时实现了window.callback和 ...

  2. android面试复习大全

    强烈向大家推荐一个好网站,[url=http://www.51zxw.net/study.asp?vip=15533661][我要自学网][/url],教程由在校老师录制,有办公会计.平面设计.室内设 ...

  3. apk开发教程!那些年Android面试官常问的知识点,2年以上经验必看

    前言 下面的题目都是大家在面试字节跳动或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享. 参考解析:郭霖.鸿洋 内容特点:条理清晰,含图像化表示更加易懂. 内容概要:包括 Hand ...

  4. 那些年Android面试官常问的知识点,分享一点面试小经验

    开头 年前面试了一些公司,目前已经拿到了阿里跟头条的 offer.去年我也出去找工作了,面试五家拿到了四家公司的 offer.所以在面试方面我应该可以提供一些愚见吧.本篇会讲解一些常见题目以及一些答题 ...

  5. Android面试常问到的知识点

    一.算法,数据结构 1.排序算法 2.查找算法 3.二叉树 4.广度,深度算法: 二.java基础 1.集合Collection,List,Map等常用方法,特点,关系: 2.线程的同步,中断方式有几 ...

  6. Android面试复习汇总

    Activity与Fragment之间生命周期比较 http://blog.csdn.net/chun0801/article/details/51956847 Activity于Fragment的生 ...

  7. 【Android 面试基础知识点整理】

    针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...

  8. 阿里、腾讯大厂Android面试必问知识点系统梳理,满满干货指导

    前言 金三银四,又是一年校招季. 经历过,才深知不易.最近,和作为校招面试官的同事聊了聊,问他们是如何去考察一个学生的,我简单归为以下几点: 聪明.反应快,这点自不必说,聪明意味着学习能力.适应力强, ...

  9. 虚拟机的分类_「面试必备」Java虚拟机知识点复习手册(下)

    关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...

最新文章

  1. 互联网主要安全威胁解读及应对方案大讨论 | 高可用架构系列
  2. 类对象和类指针深入分析与对比
  3. 让我们探索Cycle.js和Model-View-Intent的好处
  4. 新手如何开始学习3D建模?美术基础重不重要?
  5. essential-phone的相关体验
  6. 费诺编码c语言实验报告,formal parameter 4 different from declaration
  7. Android开发笔记(一百零三)地图与定位SDK
  8. Spark 按key聚合求平均值与占比
  9. STM32 ADC工作原理
  10. python pywifi 破解wifi密码
  11. 魔兽8.0最新服务器人口普查,魔兽世界8.2最新人口普查 2019各服务器人口普查信息汇总...
  12. rabbitmq的web管理界面无法使用guest用户登录
  13. 智慧城市不是建设出来的,而是运营出来的
  14. Flink报错:exceeded checkpoint tolerable failure threshould
  15. 智慧果园系统——以水肥一体化系统功能为基础实现智慧果园系统项目 需求文档
  16. ubuntu 安装jdk 1.8
  17. Unity利用双相机巧做水印功能
  18. 浅谈SBOM(软件物料清单)
  19. QCustomPlot之盒须图(十六)
  20. O2O优惠券数据分析(一)

热门文章

  1. 记录:无人机回传管理软件Springboot对接大疆无人机实现视频音频实时回传以及录制视频回放功能
  2. BodyTagSupport与TagSupport的区别
  3. java使用openOffice 实现word转pdf
  4. 安装完win7+Ubuntu双系统,无法进入Win7加载项
  5. 【文智背后的奥秘】系列篇——基于CRF的人名识别
  6. 【Vuejs】1247- Vue3 如何实现 Feature Flags?
  7. 奇酷360打不出log
  8. centos8安装NVIDIA显卡驱动,运行机器学习代码
  9. Eviews+计量经济学笔记(自用)
  10. 公开课计算机入门段然,诫子书(段然).ppt