四大组件

我是不善于写博客的人,因为很多东西随笔就记到笔记上了,但慢慢的发现,很多东西是真的会慢慢忘记的,所以通过博客来再梳理一下,可以看成是大范围的复习吧。

(1)Activity可以看成是一个单独的屏幕(窗口)。
(2)Activity之间通过Intent进行通信。
(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

生命周期

onCreate – onStart – onResume – onPause – onStop – onDestroy

如果activity退出时没走onDestroy方法,就只是失去焦点而已,并没有完全销毁,再次进入activity的话,会走onRestart,将不走onCreate

四种启动模式

1 standard模式:在这种模式下,activity默认会进入启动它的activity所属任务栈中。注意:在非activity类型的context是没有所谓的任务栈的,所以不能通过ApplicationContext去启动standard模式的activity

2 singleTop模式:栈顶复用模式,如果新activity位于任务栈的栈顶的时候,activity将不会再从新创建,而是复用当前栈顶的activity,同时它的onNewIntent方法会被回调。并且onCreate onStart onResume方法都不会被调用,因为它们没有发生改变

3 singleTask模式 栈内复用模式,只要activity在这个任务栈中,那么多次启动这个activity都不会从新创建新实例,系统都会回调onNewIntent方法。比如activityA,系统会首先寻找该任务栈中有没有它的实例,如果没有则创建,如果有,则会把该activity上面所有的activity弹出去,把自己顶到栈顶,并调用onNewIntent方法。(系统首先查看是否有任务栈,没有则创建)

4 singleInstance模式:单实例模式。该模式的activity只能单独的位于一个任务栈中,由于栈内复用性,后续的activity都会复用该activity,不会创建

注意:默认情况下,所有activity所需的任务栈的名字为应用的包名,可以通过activity指定TaskAffinity属性来指定任务栈,这个属性值不能喝包名相同,否则就没有意义

service

本地服务(LocalService)

调用者和service在同一个进程里,所以都运行在主线程的main线程中。所以该服务不能进行耗时操作,所以会在服务中开启一个子线程,创建一个Thread来执行任务。service影响的是进程的生命周期,讨论与Thread的区别没有意义。

两种启动方式 第一种

通过start方式开启服务:
1 定义一个类继承Service
2 manifest.xml文件中配置service
3 使用context的startService开启service
4 不再使用时,调用stopService(intent)方法停止服务

使用start方式启动的生命周期
onCreate() – onStartCommand() – onDestory
注意:如果服务已经开启,不会重复调用onCreate方法,如果再次调用
context.startService方法,service会调用onStart或者onStartCommand方法。
停止服务需要调用context.stopService方法。服务停止的时候回调onDestory被销毁
特点:
一旦服务开启就跟调用者(开启者)没有任何关系了。开启者退出了,开启者挂了,服务还在后台长期的运行,开启者不能调用服务里面的方法。

第二种启动方式
采用bind的方式开启服务
使用service的步骤:
1,定义一个类继承Service
2,在manifest.xml文件中注册service
3,使用context的bindService(Intent,ServiceConnection,int)方法启动service
4,不再使用时,调用unbindService(ServiceConnection)方法停止该服务
使用这种start方式启动的service的生命周期如下:
onCreate() – > onBind() –> onUnbind() – > onDestory()
注意:绑定服务不会调用onStart()或者onStartCommand()方法
特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。绑定者可以调用服务里面的方法。

3、content provider


(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
(4)开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。
(5)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

4、broadcast receiver


(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值