Activity的生命周期详讲及其的生命周期监视,应用程序启动过程,

摘要:
实现应该初始化活动的基本组件:例如,在此处创建视图并将数据绑定到列表。此回调包含活动进入前台并与用户交互之前的最后准备。此时,“活动”位于“活动”堆栈的顶部,将捕获所有用户输入。即使这样的活动失去了焦点,用户仍然希望继续更新他们的边界。这可能是因为某个活动已销毁、新活动已启动,或者现有活动处于“已恢复”状态并覆盖已停止的活动。在所有这些情况下,停止的活动将不再可用。此回调是活动收到的最后一个回调。

1:应用程序的启动过程

应用程序的图标被点击-》启动activitythread-》线程的入口main函数-》创建activitythread-》绑定activitythread thread.attach(false,startSeq)-》创建仪表类生命周期,管理程序的生命进程mInstrumentation = new Instrumentation();-》创建上下文Context ContextImpl context = ContextImpl.createAppContext(this,getSystemContext().mPackageInfo);-》创建应用程序 mInitialApplication = context.mPackageInfo.makeApplication(true,null);-》回调application的onCreate方法

启动Activity的流程:

ActivityThread->handleLaunchActivity->performLaunchActivity->创建activity的上下文createBaseContextForActivity->创建启动的⻚面activity=mInstrumentation.newActivity(cl,component.getClassName(), r.intent);->将界面和window绑定activity.attach(appContext,getInstrumentation,window)->调用onCreate方法布局activity界面mInstrumentation.callActivityOnCreate(activity, r.state);->activity.performCreate(icicle);->onCreate(icicle);在Activity的子类中通过实现onCreate方法来对界面进行初始化(UI布局,逻辑初始化)什么是Context上下文ApplicationActivityService有上下文运行环境Context提供了访问系统资源的方法可以理解为就是一个桥梁设备<->Context<->界面

:2:当从写父类的方法时,是否需要调用父类的方法:当父类的实现是空的时,一般是不需要回调的,
如果父类有实现,通常需要使用super调用以下父类,

3:什么是上下文:Context

application activity service是有上下文,运行环境的,context提供了访问系统资源的方法,可以作为一个设备与界面之间的桥梁

4:activity的各个时期所要调用的方法
onCreate()方法:
必须实现此回调,它会在系统创建 Activity 时触发。实现应该初始化 Activity 的基本组
件:例如,在此处创建视图并将数据绑定到列表。最重要的是,在此处调⽤setContentView() 来定义 Activity 界⾯的布局

onStart()方法:
onCreate() 退出后,Activity 将进⼊“已启动”状态,并对⽤户可⻅。此回调包含 Activity 进⼊前台
与⽤户进⾏互动之前的最后准备⼯作。

onResume()方法:
系统会在 Activity 开始与⽤户互动之前调⽤此回调。此时,该 Activity 位于 Activity 堆栈的顶部,
并会捕获所有⽤户输⼊。应⽤的⼤部分核⼼功能都是在 onResume() ⽅法中实现的。

onPause()方法:
当 Activity 失去焦点并进⼊“已暂停”状态时,系统就会调⽤ onPause()。例如,当⽤户点按“返回”
或“最近使⽤的应⽤”按钮时,就会出现此状态。当系统为您的 Activity 调⽤ onPause() 时,从技术
上来说,这意味着您的 Activity 仍然部分可⻅,但⼤多数情况下,这表明⽤户正在离开该
Activity,该 Activity 很快将进⼊“已停⽌”或“已恢复”状态。
如果⽤户希望界⾯继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界⾯。例如,显示导
航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,⽤
户仍希望其界⾯继续更新。

onStop()方法:
当 Activity 对⽤户不再可⻅时,系统会调⽤ onStop()。出现这种情况的原因可能是 Activity 被销
毁,新的 Activity 启动,或者现有的 Activity 正在进⼊“已恢复”状态并覆盖了已停⽌的 Activity。
在所有这些情况下,停⽌的 Activity 都将完全不再可⻅。

onRestart()方法:
当处于“已停⽌”状态的 Activity 即将重启时,系统就会调⽤此回调。onRestart() 会从 Activity 停
⽌时的状态恢复 Activity。
此回调后⾯总是跟着 onStart()。

onDestroy()方法:
系统会在销毁 Activity 之前调⽤此回调。
此回调是 Activity 接收的最后⼀个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包
含该 Activity 的进程时释放该 Activity 的所有资源。

5:不同操作时,activity周期变化
程序第一次启动时:
oncreate->onstart->onResum
程序切换到后台时:
onpause->onstop
程序从后台切换回来时:
onRestart->onStart->onResum
如果当前界面是第一个界面,且按返回按钮时进入桌面时:
onPause->onStop->onDestory
从当前界面切换到其他界面时:
onPause->onStop
从下一个页面切换回来时:
onRestart->onStart->onResum
当由横屏变为竖屏(或由竖屏变横屏)时:
onPause->onStop->onDestory->onCreate->onStart->onResum

在界面被销毁之前会调用
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}


在界面被销毁之前可以在该方法中存储数据
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("lfl","要被销毁了")
}

在onCreate方法中将数据取出
savedInstanceState?.getString("lfl")
用bundle存取数据

用lifecycle监听生命周期:
一:从写一个类,将数据放在该类里面
二:让该类继承与lifecycleobserver
class GaodeMap :LifecycleObserver{
//二:标记,当要什么时候调用就标记成什么时候,
//如init()要在create时就调用,则标记为on_create
//三:添加一个监听器,需要在哪监听该类就在哪加
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun init(){
Log.v("lfl","create方法")
}
//该方法会在onStart时调用
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun connect(){
Log.v("lfl","开始连接获取用户信息")
}

}
三:添加一个监听器,哪个activity需要在各时期调用以上方法,便在哪个activity的类中添加
//添加的生命周期的监听器,
lifecycle.addObserver(GaodeMap())//是需要一个lifecycleobserver参数,但是我们的类是继承于lifecycleobserver,
所以只需要初始化一个该类

免责声明:文章转载自《Activity的生命周期详讲及其的生命周期监视,应用程序启动过程,》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android模拟器访问localhost或127.0.0.1报错TCP接收窗口的调整算法(下)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android中activity背景色的设置

主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格。在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类: [html] view plaincopyprint? •android:theme="@android:style/Th...

记druid 在配置中心下的一个大坑: cpu 达到 100%

把我们的dubbo 应用移步到配置中心上去之后,发现我们的应用过一段时间就会出现cpu 100%的情况 (大概是12个小时),一开始cpu占用是2-5% 的样子,什么都没做,后面竟然用尽了cpu。。 把jvm 线程堆栈打印一下,发现线程数竟然达到了上万..... 发现最多是这样的一个线程: "com.alibaba.nacos.client.Worker....

maven 实现activity工作流的简单例子(以报销为例 附代码)

今天看到公司有一个项目,是关于activity工作流的,第一次接触,记录一下,方便巩固和之后的查询。 1.配置maven环境 2.运行测试代码 3.代码实现activity工作流 1.配置maven环境   activity是一个比较简单容易上手的工作流,主要操作分为一下步骤 利用activity插件画出需要的逻辑流程图 部署流程 启动流程 迭代处理流程...

[SpringBoot] SpringApplication.run 执行流程

作者:王奕然链接:https://www.zhihu.com/question/21346206/answer/101789659来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。建议不要硬着头皮看spring代码,本身的代码800多m,就是不上班开始看也不知道什么时候看完。如果想学学ioc,控制反转这些建议看看jodd项目,...

如何计算 App 的启动时间

应用启动场景 事实上 Android 中一个 App 的启动时间可以准确计算的.但是要分场景.也就是说要分开游戏和应用. 大家都知道,在Android中,游戏开发和应用开发是两码事.所以我们需要分开来说. 1.1 应用启动 我们平时在写应用的时候,一般会指定一个 mainActivity ,用户在桌面上点击这个 Activity 的时候,系统会直接起这...

WeakReference 在android中的应用

首先我们来看一段代码: public class AutoActivity extends Activity { Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) {...