导航:首页 > 操作系统 > android生命周期方法

android生命周期方法

发布时间:2022-10-24 01:10:27

android中Service的生命周期与启动方法有什么区别

●    startService():开启Service,调用者退出后Service仍然存在。

●    bindService():开启Service,调用者退出后Service也随即退出。

Service生命周期:

●    只是用startService()启动服务:onCreate() -> onStartCommand() -> onDestory

●    只是用bindService()绑定服务:onCreate() -> onBind() -> onUnBind() -> onDestory

●    同时使用startService()启动服务与bindService()绑定服务:onCreate() -> onStartCommand() -> onBind() -> onUnBind() -> onDestory

❷ 如何理解Android中Activity的三个“生命周期”

下图是官方文档里的Activity生命周期图,其中彩色标出的四个框是Activity的四种状态,当Activity的状态改变时会触发一个或多个onXXX()方法。


onCreate()

当Acitivity第一次被创建时触发,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据等等。

onRestart()

这个我比较少用到,按文档上的介绍,如果Activity之前被stop过,那么下一次onStart()方法之前会先触发这个方法。

onStart()

只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的情况不算在内。

onResume()

当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。

onPause()

和onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。

onStop()

当有其他Activity覆盖了当前Activity时,不论另一个Activity是新开始的还是从下层移至最上层的,当前Activity的onStop()方法都会被触发。

onDestroy()

Activity生命周期的终点。有两种情况会导致它被触发:1)执行了Activity#finish()方法;2)Android系统由于资源不足等原因决定杀掉Activity所在进程。通过isFinishing()方法可以判断出是哪种情况。在这个方法里,我们一般要做的事情是释放Activity占有的资源,例如后台正在进行的下载线程等等。

最后,举个实际例子来说明,假设你有一个“首页Activity”和一个“编辑页Activity”。

•当用户点击首页里的“开始编辑”按钮时,首页的onPause()->onStart()onStop()依次触发,编辑页的onCreate()->onStart()->onResume()依次触发;(感谢James.H.Fu指出的错误)

•当用户在编辑页按下“返回”按钮时,编辑页的onPause()->onStop()依次触发,之后首页的onStart() -> onResume()依次触发;

•这时用户在首页按下“返回”按钮,首页的onPause()->onStop()->onDestroy()依次触发。

❸ android的生命周期

单个Actiivty正常的生命周期

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

这就是一个Activity从被创建到被销毁过程。

其中正常运行状态为onResume

当Activity从前台被置于后台,
onResume -> onPause -> onStop

当从后台重新置于前台
onStop -> onPause -> onResatrt -> onStart-> onResume

其中可以发现,只要Activity置于前台都会执行onStart函数,所以我们可以考虑在这里做一下需要在前台就处理的逻辑

各个生命周期函数:
onCreate: Activity被创建,此时Activity处于不可见、不可交互
onStart: 此时Activity 部分可见不可交互
onRestart: Activity从后台重新回到前台,部分可见不可交互
onResume: 完全可见可交互,为Activity正常运行状态
onPause: Activity处于暂停,从前台被置于后台 部分可见部分不可见,不可交互
onStop: 完全置于后台,完全不可见,
onDestroy: Activity被销毁

上面就是一个正常的Activity的生命周期,

在Activity生命周期中,还设计一些其他:
Activity旋转:
onCreate -> onStart -> onResume
此时被旋转
-> onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

可以发现当Activity被旋转时,整个Activity是被销毁然后重新创建的。其中新增调用了两个生命周期函数
onSaveInstanceState: 当Activity被系统异常销毁时被调用,用于存储数据,用于系统恢复Activity时恢复数据
onRestoreInstanceState: 当Actiivty被系统异常销毁并重新创建时,取出在onSaveInstanceState时存储的数据

注意,在onCreate函数中,其实也是有参数的

此处的savedInstanceState也是在onSaveInstanceState时存储的数据,但此处可能为nll,
因为在正常的Activity时,此处就是null,只有在Activity被异常销毁然后被系统重新创建时,此处才有值。
如果要在此处使用,切记要判空。

onNewIntent与Activity的启动模式有关

当Activity未设置启动模式时,则不会触发该生命周期函数

当Activity已经处于应用的Activity栈中

onNewIntent只会在Activity设置了启动模式,并且Activity被复用时才会调起。

注意:只对startActivityForResult调起的Activity起作用,statActivity本质调用的也是startActivityForResult,Activity正常的切换前后台时不会触发的。

A -> B:
A正常运行处于 onResume,打开B

A onPause -> B onCreate -> B onStart -> B onResume -> A onStop
点击跳入B页面, 首先A进入暂停,B开始创建,到onResume完全可见可交互,于是A被完全遮挡,变成完全不可见、处于后台,进入onStop

A -> B ->goBack-> A

在B页再执行返回

B onPause -> A onRestart -> A onStart -> A onResume -> B Stop -> B onDestory
和A进入B类似,B返回A时,B进入暂停,A变得重新可见到A完全可见,进入onResume,然后B进入停止,并销毁

B启动模式设置为 SingleTop,B -> B
B onPause -> B onNewIntent -> B onResume
因为 B已经处于栈顶,启动模式为 SingleTop 则不会重新创建B的实例

将A的启动模式设置为SingleTask

可以通过在andorid studio的终端 Terminal中输入:adb shell mpsys activity
查看当前应用的Activity task栈

❹ 请简述Android的Activity组件的生命周期方法。

在Activity的生命周期中有很多的回调方法,系统调用Activity中的这些回调方法,就像是爬一个阶梯。而这些回调方法就相当于阶梯的每一层。当系统创建了一个新的Activity实例,回调方法一层一层的从最低层爬到最高层,也就是Resumed()。到位于顶楼的时候,也就是这个Activity就位于用户的前台。此时用户就可以和Activity进行互动了。

当用户要离开Activity的时候,系统调用右边的回调方法,一层一层的下这个阶梯,使Activity的状态从最高层移动到最底层。在有些情况下,Activity只是完成部分的状态迁移并且等待用户的指令。此时Activity只是站在Paused()上或者是Stopped()的阶梯上面,当得到用户重新运行的指令时,Activity会回到左边的阶梯上。重新调用左边相应的爬阶梯回调方法,一步一步向上爬并重新回到最高层的状态。并显示在用户的前台。

根据Activity复杂度的不同,你或许不用实现所有的生命周期方法。可是,理解每个生命周期回调函数的意义却非常重要,这能确保你的应用能完全按照用户的期望做出正确的动作。正确的实现生命周期的回调方法,才能应用正确的动作。所以作为一个合格的android程序员,理解Activity的生命周期,是非常有必要的

❺ androidx.lifecycle 生命周期感知型组件实现原理

androidx.lifecycle 组件用来感知另一个组件如 Activity 和 Fragment 的生命周期变化,方便在生命周期变更时处理一些事情。

其逻辑简单来说就是:使用者向 LifecycleRegistry 注册一个 LifecycleObserver ,当 LifecycleOwner(一般由 Activity 和 Fragment 实现)发生生命周期变更时,将其变更的 STATE 通知给 LifecycleRegistry ,然后 LifecycleRegistry 将其变更的 EVENT 告知 LifecycleEventObserver ,LifecycleEventObserver 通过 Lifecycling 转换成用户注册的 LifecycleObserver 类型并回调。

可以看到这里面最有趣的就是 LifecycleObserver 的实现方式,这是本篇重点描述的内容。

整个 lifecylce 组件最有趣的实现应该就是这个 LifecycleObserver ,它是一个空接口。所有实现它的类最后会通过 Lifecycling 转换成它的一个已知实现类 LifecycleEventObserver 。

这个框架实现的核心。它定义了一个回调函数 onStateChanged(owner, event) 。

我们先回到 Lifecycle 及其实现类 LifecycleRegistry 。

Lifecycle 定义了 Lifecycle 的 STATE 和 EVENT 。

状态和 EVENT 和 Activity 及 Fragment 对应。初始状态为 INITIALIZED 和 DESTROYED ,定义从初始状态到 CREATED 再到 STARTED 再到 RESUMED 为状态上升,相反为状态下降。

Lifecycle 存储了 Activity 、Fragment 的生命周期状态,并方便其它对象跟踪。LifecycleRegistry 是其实现类,它允许多个对象同时跟踪生命周期状态(通过 LifecycleObserver)。

上面说到可以向 LifecycleRegistry 注册任意实现的 LifecycleObserver ,然后 LifecycleRegistry 会通过 Lifecycling 转换成 LifecycleEventObserver 去监听,说到变更时再转换回自定义 LifecycleObserver 中的回调方法。那么是怎么实现的呢?

这个框架中定义了两个实现方式,一种通过自定义的 adater ,另外一种为反射。

通过 adapter 的方法其实原理很简单,就是自定义 LifecycleObserver 时同时自定义一个 adapter ,这个 adapter 需要自己实现将 LifecycleEventObserver 中回调的状态转换成 observer 中回调的方法。

这个 adapter 需要在 LifecycleObserver 同级的 pkg 下面且名为 LifecycleAdapter ,其父类或其本身继承自 GeneratedAdapter ,并有构造函数 LifecycleAdapter(LifecyelObserver)。

Lifecycling 在转换时将为这种类型的 observer 创建一个 或 ,并传入自定义的 GeneratedAdapter 实现类。因为这个 XXXGeneratedAdapterObserver 实现了 LifecycleEventObserver ,所以在其收到 onStateChange 回调时只需调用 GeneratedAdapter #callMethods ,剩下交给 adapter 自己去实现状态与回调的转换。

如果不想自定义 GeneratedAdapter 的实现类可以吗,可以。这个框架还实现了反射回调机制。只要你在自定义 LifecycleObserver 时给回调函数加上 @OnLifecycleEvent(Lifecycle.Event xxx) 的注释,Lifecycling 会帮你创建一个 并传入 observer 对象,这个 实现 LifecycleEventObserver ,并通过反射机制取出并缓存所有按规则加上了 @OnLifecycleEvent 注释的方法,在收到 onStateChange 时取出对应 event 的反射方法,并回调。

可以看到其核心实现在 CallbackInfo ,其缓存了 observer 对象中的 [event, 反射方法 list] map ,在收到 lifecycle 变更时,取出对应 event 的所有反射方法 list 并回调就行。

Lifecycling 可以说是整个实现的精髓了,它在 LifecycleObserver 注册时将其转换成 LifecycleEventObserver 的 adapter 或 reflect 实现类。

一般来说,我们使用 LifecycleEventObserver 就行,虽然这个框架通过复杂的实现可以让你随意(其实还是有条件)的定义自己要的 LifecycleObserver ,但似乎也不是很有实际用途?

android developers:使用生命周期感知型组件处理生命周期

❻ Android Activity生命周期都该做哪些事情

activity主要生命周期的方法说明: onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!
onStart():activity变为在屏幕上对用户可见时调用。
onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。 onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!
onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。 OnDestroy():activity被完全从系统内存中移除时调用,该方法被 2.横竖屏切换时候activity的生命周期
1、新建一个Activity,并把各个生命周期打印出来
2、运行Activity,得到如下信息
onCreate-->onStart-->onResume-->
3、按crtl+f12切换成横屏时
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
5、修改AndroidManifest.xml,把该Activity添加 android:configChanges="orientation",执行步骤3
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onConfigurationChanged-->
7、把步骤5的android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印onConfigChanged
onConfigurationChanged-->
8、执行步骤4
onConfigurationChanged-->onConfigurationChanged-->
总结:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

总结一下整个Activity的生命周期
补充一点,当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState --> onPause --> onStop onRestart -->onStart--->onResume
Activity未被完全覆盖只是失去焦点:onPause--->onResume

❼ IT培训分享Android软件开发主要是学习什么的

近半年来,手机的安卓系统与ios系统是目前主流的手机系统,Android软件开发主要是学习什么的?IT培训http://www.kmbdqn.com/发现安卓开发的技术很多的,如果想一次性学好是不实际的,但下面这些基础还是要学好的。



1、Activity生命周期


虽然Android中有四大组件,但是不可否认Activity是最常用的。所以熟练掌握Android的生命周期是必须的。其实生命周期就是记住 Activity的那些方法在什么时候被系统调用,这样才可以把对应的逻辑代码写到合适的方法内部去。


至于服务和广播组件可以稍微缓一下,到实际使用的时候再学习都可以。

2、界面开发技术


界面开发是一种基本的技术,几乎所有的程序里面都需要用到。在Android开发中界面开发分为3种:


1)使用xml文件布局


使用xml首先对于界面进行布局,然后在Activity里面进行引用是最常见的应用软件开发技术,这种方式使用的最大,需要学习的内容也最多。学习时需要熟悉:


a)五种Layout布局


深刻理解五种布局组织控件的方式是一个基本的基础,这样你才可以在实际的界面中灵活的使用每种布局结构,构造出需要的界面。


b)常用控件


控件有很多,至少要知道每种控件是做什么的,至于里面的特定参数和方法可以学要的时候再去查


c)界面美化


系统的控件很多时候无法满足要求,需要通过添加背景更换图片等进行美化,要熟悉每种控件如何去美化。


掌握了上面的内容,通过布局的嵌套就可以制作出各种界面,如果在熟悉include的使用就可以减少xml的重复,方便后期的修改和维护了。


2)使用代码动态创建


有些时候需要动态的创建一些布局和控件,这个就需要使用LayoutInflater去创建一些动态的界面了。


3)自己绘制界面


游戏中常用,继承SurfaceView自己绘制。


3、数据存储技术


Android中的数据存储方式有3种:


1)SharedPrefereneces存储


对于简单的数据可以使用该方式存储,以键值对的方式存储一些基本的数据。


2)文件存储


将数据以文件的形式存储,可以是手机自身的存储也可以是SD卡,文件的数据格式自己定义。


3)SQLite数据库存储


使用标准SQL语句进行操作,复杂数据的首选。

4、网络编程


现在的Android程序不需要联网的已经不多了。所以网络编程也是必须的,一般的公司都会封装有自己的联网结构,但是基本的联网还是要熟悉。


1)HTTP联网


使用Http联网+Json数据格式是现在很多客户端的首选。


2)Socket联网


至于蓝牙等连接方式则可以在项目需要的时候学习。


对于手机的系统功能,如拨打电话、发送短信、读取系统参数等则可以根据需要在学习,不麻烦的。


其次,手机软件相关


Android开发不同于普通的电脑软件开发,需要了解手机的操作习惯,知道手机的屏幕不大、内存有限,电池有限等,在实际开发和设计时尽量考虑。


❽ 如何管理Android中Activity的生命周期

在创建一个Activity中会经历:
6个方法:onCreate(),onStart(),OnResume(),onPause(),OnStop(),OnDestoty();
Activity在ADTandroid虚拟机中是以栈的形式存放的。
上面的6个方法分别是:创建,开始,继续,暂停,停止,销毁。
一共这6个生命周期的方法。

❾ 如何管理Android中Activity的生命周期

管理Android中Activity的生命周期

在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数。Activity生命周期的每一个阶段就像金字塔中的台阶。当系统创建了一个新的activity实例,每一个回调函数会向上一阶移动activity状态。处在金字塔顶端意味着当前activity处在前台并处于用户可与其进行交互的状态。

当用户退出这个activity时,为了回收该activity,系统会调用其它方法来向下一阶移动activity状态。在某些情况下,activity会隐藏在金字塔下等待(例如当用户切换到其他app),此时activity可以重新回到顶端(如果用户回到这个activity)并恢复用户离开时的状态。

根据activity的复杂度,也许不需要实现所有的生命周期方法。但了解每一个方法的回调时机并在其中填充相应功能,使得确保app能够像用户期望的那样执行是很有必要的。如何实现一个符合用户期待的app,我们需要注意下面几点:

使用app的时候,不会因为有来电通话或者切换到其他app而导致程序crash。

只有三个状态是静态的,这三个状态下activity可以存在一段比较长的时间。(其它几个状态会很快就切换掉,停留的时间比较短暂)

Resumed:该状态下,activity处在前台,用户可以与它进行交互。(通常也被理解为"running" 状态)

Paused:该状态下,activity的部分被另外一个activity所遮盖:另外的activity来到前台,但是半透明的,不会覆盖整个屏幕。被暂停的activity不再接受用户的输入且不再执行任何代码。

Stopped:该状态下, activity完全被隐藏,对用户不可见。可以认为是在后台。当stopped, activity实例与它的所有状态信息(如成员变量等)都会被保留,但activity不能执行任何代码。

❿ Android Activity生命周期都该做哪些事情

1.Android用Activity Stack来管理多个Activity,所以呢,同一时刻只会有最顶上的那个Activity是处于active或者running状态。其它的Activity都被压在下面了。 2. 如果非活动的Activity仍是可见的(即如果上面压着的是一个非全屏的Activity或透明的Activity),它是处于paused状态的。在系统内存不足的情况下,paused状态的Activity是有可被系统杀掉的。只是不明白,如果它被干掉了,界面上的显示又会变成什么模样?看来下回有必要研究一下这种情况了。 3.几个事件的配对可以比较清楚地理解它们的关系。Create与Destroy配成一对,叫entrie lifetime,在创建时分配资源,则在销毁时释放资源;往上一点还有Start与Stop一对,叫visible lifetime,表达的是可见与非可见这么一个过程;最顶上的就是Resume和Pause这一对了,叫foreground lifetime,表达的了是否处于激活状态的过程。 4.因此,我们实现的Activity派生类,要重载两个重要的方法:onCreate()进行初始化操作,onPause()保存当前操作的结果。

阅读全文

与android生命周期方法相关的资料

热点内容
文件夹侧面目录标签怎么制作 浏览:230
做程序员学什么 浏览:320
pdfeditor教程 浏览:880
fortran把文件放入文件夹 浏览:709
程序员1年经验不敢投简历 浏览:481
如何看电脑的源码 浏览:897
找工作app软件哪个好 浏览:96
信息管理网站源码 浏览:439
小说app哪个好免费 浏览:224
域名在线加密 浏览:146
软件编程西安交大 浏览:453
是不是串货的奶粉查不到溯源码的 浏览:825
北京dns服务器云主机 浏览:221
openldaplinux安装 浏览:23
java取月的最后一天 浏览:10
腾讯云服务器多久退款 浏览:949
微信广告植入系统源码 浏览:922
一年级语文上册pdf 浏览:315
好久不见app干什么用的 浏览:143
压缩包解压码对方可以更改吗 浏览:256