1. Android四大组件:
Activity:程序与用户交互的窗口,初始化界面
service:后台服务于Activity,封装有一个完整的功能逻辑实现
ContentProvider:是Android提供的第三方应用数据访问方案,可以派生Content Provider 类,对外提供数据
BroadCast Receiver:接受一种或者多种intent做触发事件,然后封装成notification,统一了android的时间广播模型
2.android的五种常用布局:五个布局嵌套使用,可以做出很好的效果
LinearLayout:线性布局,分为垂直布局和水平布局
RelativeLayout:相对布局,相对参照物来布局
FrameLayout:
AbsoluteLayout:绝对布局:绝对布局用X,Y的坐标来定义元素的位置,很少用吧
TableLayout:表格布局:每一个TableLayout里面有多个TableRow
3.android中的动画分为哪几种,他们的特点和区别是什么?
4.android里面有哪几类解析xml的类,官方推荐哪几种,以及他们的区别?
XML解析主要有三种,SAX,DOM,PULL。常规在pc上开发我们使用DOM相对轻松些,但是一些性能敏感的手机和数据库上我们还是采用SAX方式,
不占内存空间,读取是单向的,但是对于解析属性来说不是很方便。DOM会把整个XML读进内存,如果数据量不是很大的话,推荐这种方式。
5.ListView的优化方案
1.自定义适配器:重写getView方法,参数中的contentview是不是null,不是的话就创建,是的话就重复利用
2.如果数据量很大的话,可以考虑分页加载
6.android的数据存储方式:SharedPreferences 文件数据存储 SQLite数据库存储 ContentProvider存储数据 网络存储数据
SharedPreferences: 是存储一些简单的配置信息的一种方式
文件存储方式:和java的文件存储方式一样
SQLite数据库:内置的轻量级数据库
ContentProvider:这个还要看一看---------------------
7.activity的启动模式有哪些?分别是什么含义?
standard singleTop singleTask singleInstance
1.如何决定所属Task:standard和singleTop都是和启动着是在同一个Task中的,而后两种则是以Activity作为Task的基元素
2.前两种允许多个实例,存在不同的task中,一个Task也可以包含多个实例,而后两种只限制生成一个实例,并且是Task的根元素
3.是否允许其他activity在本Task内:singleInstance独占一个Task
4.是否每次都生成新实例:standard都会生成新实例,singleTop如果task在栈顶的话,不生成新实例,直接使用新实例,否则就会创建一个新实例
singleInstance不允许有其他的Activity所以每次都会重用,singleTask如果在栈顶则接受intent,否则就抛弃,但是该Task仍会回到前台。
8.跟activity和Task有关的Intent启动方式有哪些?其含义?
FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAT_ACTIVITY_SINGLE_TOP
9.请描述ACTIVITY的生命周期
10.Activity在屏幕旋转时的生命周期
不设置Activity的android:configChanges时,切屏会重新调用个生命周期,切横屏是执行一次,切竖屏时执行两次,设置android:orientation时,
切换横竖屏只执行一次设置Activity的android:configureChanges=“orientation|keyboardHidden” 时,切屏时不会重新调用各个生命周期。
11.如何启动service,如何停止service
1.继承自service类 public class SMSService extends Service{}
2.在AndroidManifest.xml文件中的<application>节点中对服务进行配置 <service android:name=".SMSService">
服务不能自己运行,需要调用Context.startService()或Context.bindServie()方法启动服务。这两种方法的启动场合不同,
使用startService()启动服务,调用者与服务之间没有关联,即使调用者退出了,服务仍然运行。使用bindService()方法启动
服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止了。使用startService()方法启动服务只能通过context.stopService()
来结束服务,服务结束会调用onDestroy方法。使用bindService()也只能通过unbindService()来停止服务。
12.注册广播有哪几种方式,这些方式有何优缺点?谈谈android引入广播机制的用意
13.请解释单线程模型下的Message Handler Message Queue Looper之间的关系
Handler用来获取当前线程中的Looper对象,Looper用来从Message Queue中获取Message,再由handler进行分发和处理
Message Queue:消息队列,用来存放通过handler发布的消息,可以通过Looper.myQueue得到当前线程的消息队列
Looper:是handler和消息队列之间的桥梁
Message:消息的类型,是线程间交流信息,处理数据的后台线程需要更新UI,则发送Message内含一些数据给UI线程。最好通过
Message.obtain()或者Handler.obtainMessage()来获取Message对象来提高效率
16.什么是ANR,如何避免它?
ANR:Application not Responding,在UI主线程或者BroadcastReceiver在10s内没有执行完毕,就会出现应用程序无响应。
避免方法:更少的去创建东西,让耗时的任务放到子线程中去完成,主线程提供一个handler确保子线程执行完毕后可以把结果提交
给主线程。
17.什么情况下导致Force close?如何避免
当程序出现异常时
避免:在写程序的时候要思维缜密,能过捕获异常,在logcat中能看到异常的信息
18.描述一下android的系统架构
android架构从下往上依次是 linux内核层 运行库 应用程序框架层 应用程序层
要想写出优质高效的代码,就必须对整个applicationframework有深入的理解,也就能驾驭整个开发
19.contentprovider是如何实现共享的
20.Sevice和Thread的区别?
Thread:是程序执行的最小单元,他是分配cpu的基本单位,可以用thread来执行一些异步的操作
Sevice:
如果service是一种服务,我们可以在有context的地方调用函数来控制它,但是Thread是做不到的
21.android api本身没有抛出异常,则其在运行的时候,会不会抛出runtime异常?
会的,比如空指针,没有获得权限等等,可以查看logcat
22.IntentService有何优点 ?
23.如果后台activity由于某种原因被系统回收了,如何在被系统回收之前保存当前状态?
重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity回收之前调用。通过重写onRestoreInstanceState()方法可以
从中提取出保存好的数据。把数据写入配置文件,然后需要时从中读出,这就类似于
36.如何将SQlite数据库与apk文件一起发布?
可以将*.db拷贝到res/raw文件夹下,这个目录下的文件不会被压缩,这样在第一次读取数据库的时候,就要将数据库文件拷贝到复制到手机的某个文件夹下,
再打开数据库,拷贝的方法getResources().openRawResource方法获得inputStream,然后在写入到文件中,,在sdk中通过SQLiteDatabase.openOrCreateDatabase()来打开数据库文件
39.java如何引用本地语言
可以通过JNI接口
41.NDK是什么?
NDK是一系列工具的集合,可以帮助开发者迅速开发C/C++的动态库,并能自动将so和java应用打成apk包。交叉编译器,并提供了相应的mk文件隔离cpu
平台等的差异,开发人员至于简单的修改就可以创建出so