M(Window) V(View) C(Controller)
Activity
什么是activity
1.描述一下activity的生命周期
Here's the order of operations that occur when Activity A starts Acivity B:
1.Activity A's onPause() method executes.
2.Activity B's onCreate(), onStart(), and onResume() methods execute in sequence. (Activity B now has user focus.)
3.Then, if Activity A is no longer visible on screen, its onStop() method executes.
ActivityManager启动activity
2.描述一下activity的Task Stack模型
栈(先进后出)
3.Intent是什么
4.Activity如何保持和恢复状态(当前进程被意外杀死)
onSaveInstanceState 保持数据
onRestoreInstanceState 该方法有时候可以不被调用,推荐使用onCreate方法
5.onConfigurationChanged的使用
横竖屏切换、语言切换
6.launchMode的四种模式
Ø Standard
Ø SingleTop
当一个Activity在任务栈顶的时候,请求启动该Activity的Intent并没有触发创建该Activity的新的实例,而是触发了栈顶Acivity的onNewIntent()方法
Ø SingleTask
当请求一个已经存在的Acivity时会触发已经存在的该Activity实例的onNewIntent()方法,并且如果该Activty所在的任务栈上面有其他Activity,那么其他Activity会被销毁。
Ø SingleInstance
该Activity独立成Taskstack,并且栈里面有且仅有自己,而且始终保持一个实例。离栈时,先退当前栈,再退其他栈。
写一个Activity发送短信和打电话的例子
SmsManager
写一个程序,对外提供一个Activity,再写一个程序通过intentfilter来启动原来进程的Activity,类似我们启动打电话的系统Activity
Service
1.什么是service
Service是应用程序组件,用于后台执行较长时间的操作,不提供用户交互界面。
2.描述一下service的生命周期
3.说一下android里面有哪几种service
按启动方式分
Ø StartedService
① 通过startService()来启动
② 一旦启动,就运行在后台,即便启动它的对象Activity都销毁了
③ 通常只启动,不返回值
④ 通常网络上传或者下载,操作完成后,自动停止
⑤ onStartCommand(), IntentService的onHandleIntent(Intent arg0)
Ø BoundService
① bindService()来绑定
② 提供客户端服务器接口来启动
③ 发送请求,得到返回值,甚至通过IPC来通讯
④ 一个服务可以被多个调用者绑定,只要有一个绑定者,服务运行,所有绑定者都退出,服务退出
⑤ onBind()
StartedService与BoundService的区别
① StartedService和启动它的Activity不同生共死,BoundService和启动它的Activity同生共死
② 无论是start or bind,只要service没有实例化,就会执行onCreate方法。但start每次都会调用onStartCommand方法。而bind如果已经绑定,就不会再调用onBind了。
本质区别:boundService其实是有一个客户端,服务器端的概念。借助于Binder来通讯。
4.Service会新开进程或者线程吗?
Service不是一个新的进程,也不是一个新的线程,是与当前进程绑定的。
5.Service和线程的使用区别
从逻辑上认为需要一个后台操作,但跟我们现在主线程操作通讯频繁,逻辑关系紧密,就用多线程;能够从逻辑上区分开来,就用后台服务。
Android UI
Android界面呈现机制
Android界面事件机制
Android界面事件分类
① keyEvent,
② TouchEvent
③ TrackballEvent
Android界面事件的触发及分类
1.事件分发的两种方法
① 扩展View的时候回调事件函数
② 注册事件监听
2 . 事件分发dispatchKeyEvent
² keyEvent分发
a.消息发到当前上下文
b.Context发到window
c.Window优先发给输入法窗体
d.发给rootView(DecorView)
e.发给焦点View
² touchEvent分发
a.判断焦点元素
b.从下往上
Android自定义组件
Customized View
Canvas Drawable
Compound View
Android 数据存储
1.数据存储的几种方式
① Xml方式
sharedPreference
Ø public sharedPreferences getPreferences(int mode)
通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文字的名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity。
Ø Public Sharedpreferences getSharedPreferences(String name, int mode)
因为继承了ContextWrapper,因此也是通过Activity对象获取,但是属于整个应用程序,可以有多个,以第一个参数的name为文件名保存在系统中。
Ø Public static SharedPreferences getDefaultSharedPreferences(Context context)
PreferenceManager的静态函数,保存PreferenceActivity中的设置,属于整个应用程序,但是只有一个,Android会根据包名和PreferenceActivity的布局文件来起一个名字保存。
② 二进制文件
③ 网络存储
④ Sqlite
ContentProvider(观察者模式)
Ø 理解ContentProvider的作用及好处
特征:a.唯一的共享程序间数据方式;b.android没有提供公共数据区让不同的程序去共享访问。
Ø 认清ContentProvider与数据存储的关系
ContentProvider是数据存储对外提供的访问接口
Ø 掌握ContentProvider对外提供的数据模型形式
Ø 能够编写ContentResolver的增删该查
Ø 能够自定义一个ConetentProvider
Ø 了解ContentProvider的内部机制 通过binder通讯
安装apk的时候注册到ProviderManager,卸载apk时取消注册,ContentProvider接受调用的时候启动宿主程序,操作完毕后,宿主进程为empty
ContentProvider是什么
① ContentProvider是一套存储访问数据的通道,让你无需了解下面的存储细节实现数据操作及共享
② 无论具体存储是如何的,存在哪儿的,但对外提供的模型是统一的
③ 定义了ContentProvider对象,会在系统初始化的时候自动实例化,无需我们手动去实例化对象
④ 我们只需要通过ContentProvider去取和操作数据即可
BroadcastReceiver
用来接收系统和自定义的消息
种类:1.常规消息(Normal)2.排序消息(Order)