android 四大组件

android的四大组件

android Activity主要的生命周期:

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestory()

android 官方Activity生命周期经典图:为了重新学习,又在网上看了文章https://www.jianshu.com/p/51aaa65d5d25,自己打log测试一下记录下测试结果。

测试手机:小米8  系统版本 android 9

1.正常情况下,activity的生命周期从启动到与前台(能够与用户交互)onCreate -> onStart() -> onResume(),前台到退出app, onPause() -> onStop() -> onDestroy().

2.当从Activity处于前台,回到桌面 onPause() -> onSaveInstanceState()  -> onStop().

3.设置手机可旋转屏幕,启动appActivity处于前台,旋转屏幕后调用生命周期方法onResume() -> onSaveInstanceState() -> onStop -> onDestroy() -> onCreate() -> onStart() -> onRestoreInstanceState() -> onResume(),设置了android:configChange=“orientation”仍然会走上面过程。设置了android:configChange="orientation|screenSize"旋转屏幕后不会销毁Activity重建了,没有调用生命周期方法,设置android:screenOrientation="portrait"后,屏幕不再旋转。

4.活动A启动活动B,活动A会先调用onPause(),然后活动B调用onCreate() -> onStart() -> onResume,活动B启动后,活动A在调用onSaveInstanceState() -> onStop().(目的大概是让活动B能够尽快呈现与用户交互)

以上便是有些不相似的地方(貌似意义不大,不过也记录下,可能跟android9版本或小米系统有关,条件不足,待确认)

Activity和Fragment生命周期之间的联系(这里用贴上打log图):

Activity的启动模式

1.standard(默认):标准模式,Activity默认的启动模式。以该模式启动的Activity会新建一个实例,压入启动它的Activity所在的任务栈中,不管任务栈中是否存在它的实例。注意:非Activity类型的context(ApplicationContext)没有任务栈,以这种类型的context启动标准模式Activity会导致程序崩溃。

2.singleTop:栈顶复用模式。当启动singleTop模式的Activity,会先找到当前任务栈栈顶的Acitivity是否是该Acitivity的实例,如果是就调用它的onNewInstance()方法,经测试,还会调用onResume()方法。如果不是,则新建一个实例,放到任务栈栈顶。

3.singleTask:栈内复用模式。启动singleTask模式的Acitivity,会先查看是否有它想要的任务栈,如果没有,则新建一个它要求的任务栈,并创建一个实例压入栈中。如果有它想要的任务栈,则查看栈内是否有该Activity的实例,如果没有则创建一个实例压入栈中,如果有则调用它的onNewInstance()方法和onResume()方法。

4.singleInstance:单实例模式,加强版的singleTask模式。启动单实例模式的Activity,系统会默认为它创建一个任务栈,并创建Activity实例压入栈中,该任务栈中有且只有一个Activity实例。以后调用的时候会调用它的onNewInstance(),onResume()。

Activity的Flogs

1.FLAG_ACTIVITY_NEW_TASK : 标记位设置启动的Activity为singleTask模式,经测试(效果与xml中设置不相同),网上看到(singleTask 其实等价于 new_task + clear_top + single_top),待确定。

2.FLAG_ACTIVITY_CLEAR_TOP:标记位设置启动的Activity有clear top清除在它上面Activity的效果,一般与FLAG_ACTIVITY_NEW_TASK.

3.FLAG_ACTIVITY_SINGLE_TOP:标记位设置启动的Activity为singleTop模式,效果与xml中设置效果相同.

服务 - Service

1.本地服务。服务也有它自己的生命周期,它与Activity不同的是,它有两种启动方式。不同的启动方式搜调用的生命周期方法略有不同。

第一种启动方式:

启动服务startService() 停止服务stopService() 这时它的生命周期:onCreate() -> onStartCommant() -> onStop() -> onDestroy()。服务启动后便和启动者没有关系了,并且多次启动也不会重新创建一个新的服务,会调用onStartCommant(). 调用stopService()会停止服务。因为服务启动后与启动着没有关系了,所以即使启动者(例如Activity)被退出了,服务也会不停止,甚至退出APP。除非调用stopService()停止服务或者杀死进程。

第二种启动方式:

bindService(...); unBindService(...);这种启动方式一般是Activity启动Service,Activity绑定Service,方便它们之间的通信。这种启动方式下的服务,在绑定它的Activity被杀死后,它也会停止。一般需要在Activity的onDestroy()中添加unBindService(...).

2.远程服务

远程服务一般是指其它进程的服务。要与远程进程进行通信典型的做法是使用aidl,可以在另一个App中添加一个服务作为远程服务,也可以在同一个项目中将服务设置在一个单独的进程中,它们本质上是一样的东西。借助网上的例子并自己码一遍加深印象。

客户端代码:

服务端代码:

代码结构

广播 - BoradcastReceiver

广播有普通广播(无序广播),有序广播,粘性广播。

广播有两种注册方式:静态注册和动态注册。

静态注册就是在ActivityMenifest.xml中注册声明,静态注册在进程被杀死的情况下也能接收到广播。动态注册就是在代码中注册广播。动态注册广播注册方式需要在代码中注册了才能接受到广播,并且应该在适当的时机取消注册(譬如onPause())。

动态注册:

动态注册

动态注册

静态注册的发送接收广播跟动态注册是一样的,只需要将action设置为静态广播过滤的action即可。

静态注册

注意事项:广播接收器中不能做耗时操作,程序的执行时间是10秒内,否则会弹出ANR(Application No Response)的对话框。一般来说,广播接收器中处理的事情都是比较轻量,耗时操作可以开启一个服务去进行操作。

enabled代表是否启用这个广播接收器,exported属性表示是否允许这个广播接收器接受本程序以外的广播。

内容提供者 - ContentProvider

内容提供者,可以对手机的存储数据进行操作,可以是手机系统本身的资源,也可以是其它app的数据。内容提供者是天生的进程通信的组件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容