activity生命周期

来源:互联网 发布:java环境变量配置win10 编辑:程序博客网 时间:2024/05/17 22:37

启动和销毁activity

1,activity生命周期金字塔模型

basic-lifecycle


2,指定程序首次启动的activity

<activity android:name=".MainActivity" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

 如果没有声明MAIN action 或者LAUNCHER category的activity,手机主界面不会呈现app图标


3,onCreate()方法执行activity所需要的基本逻辑或者操作(onCreate()时界面不可见,尽量少做事情,避免程序启动太久看不到界面)


4,onStart执行之后activity开始可见,onPause执行之后开始部分可见,onStop执行后就不可见了,返回之后,重新执行onRestart,onStart开始可见


5,onPause和onStop执行清除activity资源的操作,onDestroy时清理可能导致内存泄露的资源以及杀死后台线程


6,在onCreate里面调用finish()方,系统会跳过生命周期中的其他方法,直接调用onDestroy


暂停与恢复activtiy

1,onPause时,处于部分可见的状态,但是更多时候意味正在离开activtiy,并马上进入onStop

onPause:①停止动画或者停止其他正在运行的操作,这些都是对cpu的浪费

                    ②保存内容(例如邮件草稿)

                    ③释放系统资源,例如broadcast receivers, sensors (比如GPS),摄像头资源等等

2,onPause仅仅保存用户需要保存的数据(比如邮件草稿)到永久存储,避免执行cpu密集型的工作,比如写数据到DB,会导致切换到下一个activity缓慢(heavy-load的工作放到onStop()去做

3,恢复activity:Paused状态恢复activity时,系统会调用onResume(注意:每次调用这个方法时,activity都处于前台),在onResume中初始化在onPause中释放掉的组件


停止和重启activity

1,停止:①切换到另一个app,我们的app是被停止的,再回来我们app,会重启onRestart

            ②app里面执行启动新activity,第二个activity被创建后,当前activity才stop,如果点击back按钮,第一个activity会被重启

            ③暂停时阻塞ui,停止状态ui不可见并且用户的焦点转移到另外一个activity

            ④activity会自己停止和重启,只需要在onPause()中停止正在运行的动作并断开系统资源链接

            ⑤无论什么原因导致activity停止,系统总是会在onStop()之前调用onPause()。

2,activity调用onStop方法,不可见,应该释放不再需要的所有资源(一旦activity停止,在需要内存时系统会摧毁它的实例,极端情况下会直接杀死app进程,并不执行onDestroy,所以需要在onStop释放资源,从而避免内存泄露)

3,activity停止后,activity对象会保存在内存中,并在onResume时重新调用,不需要在恢复到Resumed state状态前重新初始化那些被保存在内存中的组件(系统保存了每一个布局中视图的当前状态到一个Bundle中,比如EditText组件中输入了text,会被保存,因此不需要保存与恢复它)

4,恢复:创建activity,从停止状态重启activity,然后显示activity过程中都要调用onStart(),因此,在onStop()里面做了哪些清除的操作,就该在onStart里面把清除掉的资源重新创建。

5,onStop释放资源,onDestroy则是最后去清除可能导致内存泄露的地方,要确保哪些线程都被destroyed并且所有操作都被停止

6,动态注册一个广播接收器,只有在activity在前台才有意义(例如,接受到广播弹出对话框),此时就需要onStart中注册,onStop中解除

7,极端情况:内存不足属于安卓系统控制范围内,不属于极端情况,系统会调用onDestroy之后再杀死进程

                            自己调用了android.os.Process.killProcess属于极端情况,

重新创建Activity

1,系统资源紧张导致activity被destrory,系统会保存数据,再回到这个activity时会使用保存的数据来重新创建新的activity实例。(数据:存放在bundle对象中的键值对)

2,使Android系统能够恢复view的状态,每个View都必须有一个唯一ID(view的状态是基于id存储的,自带控件默认setSaveEnabled(true),从开始开发一个自定义的view,则需要手动设置(setSaveEnabled


3,跳转其他activity,或者点击home都会执行onSaveInstanceState,这种情况都有可能资源不足被destroy

4,系统默认保存和恢复的是视图状态的信息,额外的信息要自己在方法里面保存到bundle中。

恢复activity

1,onCreate和onRestoreInstanceState都收到了同样的bundle,onCreate(可能第一次也可能是重建)中要判断bundle是否为空

2,onRestoreInstanceState方法会在onStart()方法之后执行,存在需要恢复的状态信息时才会调用onRestoreInstanceState(),不需要检查bundle是否为null


0 0
原创粉丝点击