activity生命周期
来源:互联网 发布:java环境变量配置win10 编辑:程序博客网 时间:2024/05/17 22:37
启动和销毁activity
1,activity生命周期金字塔模型
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
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- 异常标签
- JPA 和hibernate-jpa-api
- Andriod Studio问题解决笔记
- 利用runtime动态增加属性来封装一个全局调用loading效果
- Android 内功心法(1.7)——android常用设计模式之组合(合成)模式
- activity生命周期
- Host Health Tests
- PipeMapRed.waitOutputThreads(): subprocess failed with code N
- NGUI
- 高质量C编程02-数据类型
- uva 10566 Crossed ladders(二分 + 几何)
- listview嵌套listview的替换解决方案(适用于个别情况)
- Java 深拷贝&浅拷贝
- hive学习笔记二:安装