四大组件+Intent(四大组件的通信):
1、Activity
一个界面对应一个Activity
2、Broadcast
广播(电话)
3、Services
无界面,相应时间长(下载/后台听歌)
4、ContentProvider
权限相关
Android中View类
1、View树
ViewGroup(LinearLayout/RelativeLayout/AbsolateLayout/FrameLayout/TableLayout)
ViewGroup View View
View View
2、View分类
TextView
ImageView
KeyboardView
ProgressBar
SurfaceView
ViewGroup
3、定义多Activity步骤
----定义Activity类+layout布局文件
----在manifest中生命类
----定义Intent对象
----通过intent启动activity
4、本地持久化(例如记住密码)
小文本内容:sharedpreference
不规则文件:文件系统存储
有关系,复杂:SQLite(联系人)
5、网络访问:
http
urlConn
-------------------------------------------------
2016/7/14
1. Activity的四种启动模式(可以在manifest中launchMode控制或者intent.addFlags)
a. 标准模式(默认): 调用startActivity即可产生一个新的实例
若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……
点back键会依照栈顺序依次退出。
b. singleTop:如果已经有一个实例位于Activity栈顶部,就
不产生新的实例,而是调用该Activity的onNewInstance
如果不位于栈顶,则产生新的实例
c. singleTask:在新的task产生实例,以后每次调用就用这个实例
同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,
也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
singleTask会把task中在其之上的其它Activity destory掉。
d. singleInstance:在activity的task中产生新的实例
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
Service
a. Service是在一段不定的时间运行在后台,不和用户交互应用组件。
b. 每个Service必须在manifest中 通过<service>来声明。可以通过contect.startservice和contect.bindserverice来启动。
c. Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。
Service的2中模式:
1. startService()/ stopService():(调用者和服务没有关联,需要显示调用stopService关闭服务)
用于应用程序内部服务:用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。
调用生命周期:context.startService() ->onCreate()- >onStart()(可能被多次调用)->Service running
context.stopService() | ->onDestroy() ->Service stop
2. bindService()/ unBindService()(调用者和服务关联,调用者一旦退出,服务自动关闭)
用于android系统内部应用程序之间。比如调用天气服务,短信服务等,可以被其他应用程序复用
它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。
调用生命周期:context.bindService()->onCreate()->onBind()->Service running
onUnbind() -> onDestroy() ->Service stop
启动service,根据onStartCommand的返回值不同,有两个附加的模式:
1. START_STICKY 用于显示启动和停止service。
2. START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要处理时才运行的模式。
BroadCast Receiver
用于异步接收广播Intent。主要有两大类,用于接收广播的:
1. 正常广播 Normal broadcasts用 Context.sendBroadcast()发送,完全异步
2. 有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver
Broadcast Receiver 并没有提供可视化的界面来显示广播信息。
可以使用Notification和Notification Manager来实现可视化的信息的界面,显示广播信息的内容,图标及震动信息
注册Receiver
1. 静态注册:在AndroidManifest.xml的application里面定义receiver并设置要接收的action。
2. 动态注册:在activity里面调用函数来注册,和静态的内容差不多。一个形参是receiver,另一个是IntentFilter
Permission权限
要接收某些action,需要在AndroidManifest.xml里面添加相应的permission。例如接收SMS:
一个receiver可以接收多个action的,即可以有多个intent-filter,需要在onReceive里面对intent.getAction(action name)进行判断。
ps:个人推荐使用静态注册方式,由系统来管理receiver,而且程序里的所有receiver,可以在xml里面一目了然。而动态注册方式,隐藏在代码中,比较难发现。
而且动态注册,需要特别注意的是,在退出程序前要记得调用Context.unregisterReceiver()方法。一般在activity的onStart()里面进行注册, onStop()里面进行注销。
官方提醒,如果在Activity.onResume()里面注册了,就必须在Activity.onPause()注销。
ContentProvider:
主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。
ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。
共同学习,写下你的评论
评论加载中...
作者其他优质文章