Android四大组件相关知识点

目录

Activity

一 什么是Activity?

二 Activity的生命周期?

2.1 onStart 和 onResume、onPause 和onStop 从描述上来看差不多,对我们来说有什么实质上的不同?

2.2 onSaveInstanceState 和 onRestoreInstanceState 的作用

2.3 onSaveInstanceState() 什么时候调用?

三 一个ActivityA跳转到ActivityB,然后ActivityB在返回到ActivityA,这个过程两个Activity的生命周期是什么样的?

四 Activity在横竖屏切换时候的生命周期是怎样的?

五 Activity的启动模式和使用场景

六 谈谈你对Activity中onNewIntent()方法的认识?

七 什么情况下Activity会单独执行onPause?

八 Activity之间如何通信 & Activity和Fragment之间通信 & Activity和Service之间通信?

1、Activity向Fragment传递数据?

2、Fragment将数据传递给Activity?

3、 Activity与Service数据通信?

九 Activity常用的标记位Flags?

十 Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案?

十一 显示启动和隐式启动

十二 用Intent传递数据和Bundle传递数据的区别?为什么不用HashMap呢?

十三 了解scheme跳转协议吗?谈一谈

Service

一 什么是service?

二 说说Service的生命周期,两种启动方式的区别

三 service启动流程

四 Service与Activity怎么实现通信

五 IntentService是什么,IntentService原理,应用场景及其与Service的区别

BroadcastReceiver

一 广播是什么?

二 广播的特性是什么?

三 广播的分类是什么?及使用场景

四 广播的两种注册方式的区别

五 如何实现拦截一条短信?


Activity

一 什么是Activity?

activity是android四大组件之一,它提供屏幕进行交互。每个activity都会获得一个用于绘制其他界面的窗口。

一个应用通常由一个或多个activity组成,一般会指定一个activity作为主界面,activity有自己的什么周期,不同的状态会调用不同的生命周期方法。

二 Activity的生命周期?

  1. onCreate(): 表示Activity 正在被创建,每个activity中我们都重写了这个方法,它会在活动第一次被创建的时候调用。在这个方法中我们可以完成活动的初始化操作,比如说加载布局、绑定事件等
  2. onRestart():表示Activity 正在重新启动。一般情况下,当当前Activity 从不可见变为可见时,onRestart 会被调用。这种情形一般是用户行为所导致的,比如用户按 Home 键切换到桌面或者用户打开了一个新的 Activity,此时当前的Activity 就会暂停,即onPause 和 onStop 被调用,接着用户重新回到了这个Activity,此时onRestart 就会被调用
  3. onStart():表示Activity 正在被启动,即将开始,此时Activity 已经可见了,但还没有出现在前台,即还无法与用户进行交互。可以理解为Activity 已经显现出来了,但是我们还看不到
  4. onResume():表示Activity 已经可见了,并且出现在前台并开始活动,此时可以与用户进行交互。此时的活动一定位于返回栈的栈顶,并且处于运行状态
  5. onPause():表示Activity 正在停止,正常情况下onStop 会紧接着被调用。这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉(比如动画),以及保存一些关键数据,但不能太耗时,不然会影响到新的栈顶活动的使用,onPause 必须先执行完,新 Activity 的onResume 才会执行
  6. onStop():表示Activity即将停止,在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行,可以做一些稍微重量级的回收工作,同样不能太耗时。
  7. onDestory():表示Activity 即将被销毁,这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态,这是Activity 生命周期中的最后一个回调,在这里我们可以做一些回收工作和最终的资源释放

2.1 onStart 和 onResume、onPause 和onStop 从描述上来看差不多,对我们来说有什么实质上的不同?

这两个配对的回调分别表示不同的意义,onStart 和onStop 是从Activity 是否可见的角度来回调的,而onResume和 onPause 是从Activity 是否位于前台这个角度来回调的,除了这种区别,在实际使用中没有其他明显的区别

2.2 onSaveInstanceState 和 onRestoreInstanceState 的作用

Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。

通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存.

2.3 onSaveInstanceState() 什么时候调用?

(1)、当用户按下HOME键时。 这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity 是否会被销毁,因此系统会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则

(2)、长按HOME键,选择运行其他的程序时。

(3)、按下电源按键(关闭屏幕显示)时。

(4)、从activity A中启动一个新的activity时。

(5)、屏幕方向切换时,例如从竖屏切换到横屏时。

(6)、引发activity销毁和重建的其它情况,除了系统处于内存不足的原因会摧毁activity之外, 某些系统设置的改变也会导致activity的摧毁和重建. 例如改变屏幕方向, 改变设备语言设定, 键盘弹出等

三 一个ActivityA跳转到ActivityB,然后ActivityB在返回到ActivityA,这个过程两个Activity的生命周期是什么样的?

默认启动模式下:

在A跳转B会执行:A onPause -> B onCreate -> B onStart -> B onResume->A onStop

在B按下返回键会执行:B onPause -> A onRestart -> A onStart -> A onResume-> B onStop -> B onDestroy

当 B Activity 的 launchMode 为 singleInstance,singleTask 且对应的 B Activity 有可复用的实例时:

A.onPause -> B.onNewIntent -> B.onRestart -> B.onStart -> B.onResume -> A.onStop -> ( 如果 A 被移出栈的话还有一个 A.onDestory)

当 B Activity 的 launchMode 为 singleTop且 B Activity 已经在栈顶时(一些特殊情况如通知栏点击、连点),此时只有 B 页面自己有生命周期变化:B.onPause -> B.onNewIntent -> B.onResume

四 Activity在横竖屏切换时候的生命周期是怎样的?

1、不设置Activity的configChanges属性,或设置configChanges="orientation",或设置configChanges="orientation|keyboardHidden",切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行一次。

2、配置 android:configChanges="orientation|keyboardHidden|screenSize",才不会销毁 activity,且只调用 onConfigurationChanged方法。

竖屏:启动:onCreat->onStart->onResume.

切换横屏时:onPause-> onSaveInstanceState ->onStop->onDestoryonCreat->onStart->onSaveInstanceState->onResume.

如果配置这个属性:androidconfigChanges="orientation|keyboardHidden|screenSize"就不会在调用Activity的生命周期,只会调用onConfigurationChanged方法

五 Activity的启动模式和使用场景

  • Standard:默认模式,每次启动Activity都会创建一个新的Activity实例
  • SingleTop:通知消息打开的页面,如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法,如果要启动的Activity不在栈顶,则会重新创建该Activity的实例,可以有效减少activity重复创建对资源的消耗
  • SingleTask:如果要启动的Activity已经存在于它想要归属的栈中,那么不会创建该Activity实例,将栈中位于该Activity上的所有的Activity出栈,同时该Activity的onNewIntent()方法会被调用
  • SingleInstance:创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例,整个手机操作系统里面只有一个实例存在就是内存单例,一般用于其他应用启动当前应用中的activity,可以保证其他应用和自己本身应用启动此activity都是同一实例
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值