Android四大组件生命周期

1.Activity
这里建三个Activity来跑一跑,MainActivity,FirstActivity,SecondActivity。
在MainActivity中添加两个按钮,用来跳转到后两个Activity。并且重写Activity生命周期的方法。(onCreate,onStart,onResume,onPause,onStop,onDestroy,onRestart)FirstActivity为正常的Activity,SecondActivity在清单文件中,主题改为一个Dialog形式。
当程序开始执行,可以看到控制台输出为

12-14 21:08:40.812 1811-1811/com.example.administrator.findjob I/MAINACTIVITY: onCreate
12-14 21:08:40.940 1811-1811/com.example.administrator.findjob I/MAINACTIVITY: onStart
12-14 21:08:40.940 1811-1811/com.example.administrator.findjob I/MAINACTIVITY: onResume

当点击button1,跳转到FirstActivity后,可以看到控制台输出为

12-14 21:37:53.548 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onPause
12-14 21:37:58.916 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onStop

点击Back回退到MainActivity后,控制台输出为

12-14 21:39:13.032 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onRestart
12-14 21:39:13.032 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onStart
12-14 21:39:13.032 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onResume

点击button2跳转到SecondActivity,控制台输出为

12-14 21:40:06.392 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onPause

点击Back回退到MainActivity后,控制台输出为

12-14 21:40:36.948 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onResume

再次点击Back退出程序,控制台输出为

12-14 21:41:28.136 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onPause
12-14 21:41:33.956 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onStop
12-14 21:41:33.956 23054-23054/com.example.administrator.findjob I/MAINACTIVITY: onDestroy

Activity生命周期
配合此图就可以很好的理解Activity的生命周期了,主要区分点就是activity是否可见,如果不可见了,一定会执行onstop方法,如果可见但是不是在最顶层,那么只会执行onpause方法。

2.BroadcastReceiver
广播接收者在收到与自己定义的action相同的广播后被激活,执行onReceive方法。注意在onReceive方法中,不能进行耗时操作。最多有10s的执行时间。如果超过10s,则会出现ANR。

3.ContentProvider
内容提供者往往和内容解析者(ContentResolver)一起使用,实际上,用户就是通过内容解析者来访问内容提供者中共享的数据的。
当内容解析者发送增删改查等请求时,内容提供者被激活,执行完毕后,内容提供者自动关闭。所以内容提供者的生命周期可以看做时,被内容解析者激活到执行完内容解析者的请求这段时间。

4.Service
Service在其生命周期中,主要有以下几个方法。
onCreate,onStart,onStartCommand,onBind,onDestroy,onUnbind。我们写一个小程序来测一下。程序新建一个Activity和一个Service文件。在Activity中注册四个Button,分别开启,绑定,解绑,停止服务,我们运行程序依次查看控制台输出结果。
当点击开启时,控制台输出

12-16 05:26:29.411 1499-1499/com.example.administrator.findjob I/MyService: onCreate
12-16 05:26:29.411 1499-1499/com.example.administrator.findjob I/MyService: onStartCommand
12-16 05:26:29.411 1499-1499/com.example.administrator.findjob I/MyService: onStart

正常开启一个服务,先onCreate 再onStartCommand最后onStart
点击停止,控制台输出

12-16 05:31:05.854 1499-1499/com.example.administrator.findjob I/MyService: onDestroy

然后我们点击两次开启,控制台输出

12-16 05:31:51.586 1499-1499/com.example.administrator.findjob I/MyService: onCreate
12-16 05:31:51.586 1499-1499/com.example.administrator.findjob I/MyService: onStartCommand
12-16 05:31:51.586 1499-1499/com.example.administrator.findjob I/MyService: onStart
12-16 05:31:57.386 1499-1499/com.example.administrator.findjob I/MyService: onStartCommand
12-16 05:31:57.386 1499-1499/com.example.administrator.findjob I/MyService: onStart

由此可见,当我们开启一个已经开启的服务时,onCreate方法不会再次执行,也就是说,一个服务对应一次onCreate方法。

接下来我们将服务关闭,直接点击。控制台输出为

12-16 05:34:33.258 1499-1499/com.example.administrator.findjob I/MyService: onCreate
12-16 05:34:34.758 1499-1499/com.example.administrator.findjob I/MyService: onBind

我们发现没有执行onStartCommand和onStart方法。然后点击解绑。

12-16 05:37:21.181 1499-1499/com.example.administrator.findjob I/MyService: onUnbind
12-16 05:37:21.181 1499-1499/com.example.administrator.findjob I/MyService: onDestroy

我们发现,解绑后,服务自己就停止掉了。
最后一次测试,我们先开启,再绑定。控制台输出为

12-16 05:43:22.135 16648-16648/com.example.administrator.findjob I/MyService: onCreate
12-16 05:43:22.135 16648-16648/com.example.administrator.findjob I/MyService: onStartCommand
12-16 05:43:22.135 16648-16648/com.example.administrator.findjob I/MyService: onStart
12-16 05:43:23.415 16648-16648/com.example.administrator.findjob I/MyService: onBind

此时我们直接点击停止按钮,控制台没有任何输出。必须要先解绑后,服务才能关闭。控制台输出

12-16 05:44:40.637 16648-16648/com.example.administrator.findjob I/MyService: onUnbind
12-16 05:44:42.407 16648-16648/com.example.administrator.findjob I/MyService: onDestroy

由以上测试我们发现,服务的开启和关闭,绑定和解绑,是两两相互依赖的,有开启,必须要关闭,有绑定,必须要解绑。如果开启和绑定都存在时,必须要先将其解绑才可关闭服务。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值