Android面试中经常遇到的问题

原创 2015年08月07日 16:02:11

Android的四大组件

四大组件的共同点是,要想使用,都要在AndroidManifest.xml里面进行注册。

1. Activity

Activity的生命周期

首先,Activity有七个表示不同阶段的回调函数。
onCreate onStart onResume onPause onStop onDestroy onRestart
下面这张图表示的是Activty完整的生命周期。
这里写图片描述
在pause和stop状态下Activity都有可能被回收
可以分为三个不同的生命周期。分别是:

  • entire lifetime
    onCreate->onStart->onResume->onPause->onStop->onDestroy
  • visible lifetime
    此时Activity是可见的
    onStart->onResume->onPause
  • foreground lifetime
    此时可以Acticity是可见的,并且可以接受用户的交互
    onResume->onPause

Activity的启动模式

通过在AndroidManifest.xml文件里面配置< activity >标签的android:LaunchMode属性来决定Activity的启动模式

standard

默认的启动模式。
每次要启动这个Activity的时候,不管当前的返回栈中是否已经有了这个Activity的实例,都会生成一个把这个Activity的一个新的实例入栈。

singleTop

当要启动的Activity有位于返回栈栈顶的实例的时候,不创建新的实例入栈;否则,创建一个新的实例并入栈。

singleTask

放要启动一个Activity的时候,首先查看整个返回栈中有没有这个Activity的实例,如果有的话(不管在不在栈顶),就把这个实例之前的其他实例出栈,使得这个实例移到栈顶,变成当前Activity;如果没有发现已有的实例,还是创建一个新的实例并入栈。

singleInstance

每个进程维护一个返回栈,表示这个进程启动过的Activity。当Activity是这个启动模式的时候,第一次启动这个Activity的时候这个Activity的实例不会入当前的返回栈,而是创建一个新的返回栈并入栈。

2. Service

Local Service —————-运行在主进程中
Remote Service————– 运行在单独的进程中

service的生命周期

这里写图片描述

Service的两种状态

started

A service is “started” when an application component (such as an activity) starts it by calling startService().

bound

A service is “bound” when an application component binds to it by calling bindService().

既被start又被绑定的service生命周期
这里写图片描述

只有Service, ContentProvider, Activity才能和Service进行bind,Broadcast Receiver不行。
要想实现和Service的交互,可以通过serviceConnection接口。
用一个类实现serviceConnection接口,重写onServiceConnected()方法和onServiceDisconnected方法。然后把这个类的实例作为参数传给bindService()方法;在Service那边要重写onBind()方法,返回一个继承自Binder类MyBinder的类的实例,这个实例会被传递给上面的onServiceConnected方法(如果onBind()返回null,则不会有回调),如果我们在这个MyBinder类中写了可以获得Service实例的public方法(MyBinder可以作为Service的内部类),现在就可以通过这个方法来获得Service实例,然后就可以和Service进行交互了。需要注意的是,调用unbind()是不会回调serviceConnection接口中的onDisConnected()函数的。只有在未预期的情况下(比如service突然被kill)才会调用

当Service被调用startService或者bindService的时候,如果服务是没有在内存中的,那么就会执行onCreate和onStartCommand,如果Service此时是活跃的,只会执行onStartCmmand。started和bound并不冲突。当一个Service既started又bound的时候,当所有绑定的组件都unbindService调用了stopSelf()或者stopService两个条件都满足的时候才会被销毁。

Service的意义以及和Thread的区别

比如音乐播放,或者消息推送等,会用到Service。
Service和Thread是两个完全不同的概念。
除非特别指定,否则Service运行在当前进程的主线程里。Service是说想运行某些长时间的,不需要和用户交互的任务的时候用到。有服务的线程不容易被系统杀死。为了防止ANR,可以在服务中启动新的线程来执行任务。

3. Broadcast Receiver

4. Content Provider

ContentProvider和ContentResolver之间自动管理跨进程通信IPC
特定的查询方式避免了sql注入,



ListView的优化方法

getView方法
因为ListView每一个要绘制的item是用过与之绑定的adapt的getView方法返回的,所以中心思想是要尽量减少在getView方法中所做的事情。
复用getView(int position, view covertView, viewGroup parent)中的covertView,就可以避免每次都要inflate,很费时。省去从xml布局文件映射到内存中各个view的时间。
viewholder
使用一个viewHolder类,里面的属性是listView中的每个item中包含的view。当inflate的时候,使用setTag把赋好值的viewHolder给和item关联起来,当covertView不为null的时候,直接用getTag得到之前的viewHolder,省去findViewByView()的时间
异步加载图片

滑动的时候不去加载item

图片缓存

recycleView(android L)
ListView的替代类,性能更好。


数据持久化存储的几种方法

1. Shared Preference

2. SQLite

3. Content Provider

4. 文件系统


Android的布局有哪几种,分别有什么特点


多线程,以及Handler、Message、Looper的作用和原理

java中的多线程


view的重写

view.post()方法

版权声明:本文为博主原创文章,未经博主允许不得转载。

面试经常遇到问题

  • 2013年02月24日 14:08
  • 7KB
  • 下载

面试中经常遇到的问题(非技术)

面试中经常遇到的问题   1、请你自我介绍一下你自己  回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包...

JAVA中的多线程问题(高级面试中经常遇到)

很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的。这篇文章收集了 Java 线程...

java面试经常会遇到的一些问题分析

java面试经常会遇到的一些问题分析一、int和Integer相关试题 1、int a =100,int b=100,Integer c = 100,Integer d = new Integer(...

面试的时候经常遇到数据类型字节大小,字节对齐的问题,现整理如下

笔试给出的问题没有说明是32位还是16位,也没有说明编译器版本,这让用过gcc,同时又用过vc++的人是有点为难了,面试的时候又有点紧张,所以会把不同编译器的数据类型大小混淆了。 思维还是不够清晰啊...

程序员面试经常遇到的三个问题

如果你只想获取一些面试准备经验,那么你可以直接跳到文章的最后部分。 对于算法面试问题是否有效一直饱受争议。然而,代码编写问题有时候能够很好筛选人才。在我们的例子中: 1. 这些问题是“CS...

在Android编程或者面试中经常会遇到JAVA 面向对象和集合的知识点

转载出处:http://blog.csdn.net/zhoubin1992/article/details/46481759  在Android编程或者面试中经常会遇到JAVA 面向对象和集合的知识...

java面试,经常遇到面试官的问题

1.string与stringbuffer的区别? 答,string字符串长度不可改变,stringbuffer长度可以改变 面试官又问:那string  不是也可以通过字符拼接或字符截取改变其长度吗...

面试中经常会被问到的70个问题

  • 2017年12月01日 22:16
  • 31KB
  • 下载

面试中经常会碰到的算法问题

  • 2009年04月23日 23:01
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android面试中经常遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)