andriod学习笔记(2)--- 生命周期

andriod的生命周期


官网拔下来的图。。。

做程序要注意的几个地方

  • Does not crash if the user receives a phone call or switches to another app while using your app.
  • Does not consume valuable system resources when the user is not actively using it.
  • Does not lose the user's progress if they leave your app and return to it at a later time.
  • Does not crash or lose the user's progress when the screen rotates between landscape and portrait orientation.
翻译下就是
1.用户接电话,或者转向其他应用程序时,程序不能崩溃
2. 用户没有在使用的时候,不要浪费系统资源
3. 用户离开一会儿,回来后,程序进程不能丢失
4. 用户旋转屏幕的时候,程序不会崩溃,程序进程不会丢失

图上那么多个状态里
有三种是静态的,静态是说啊,程序只有在这三种状态下可以持续一段时间

1. Resumed:在前台,可以有交互

2. Paused:被另外的应用程序阻断,程序是半透明,或者没有覆盖整个屏幕,不能接受任何用户输入,不能执行代码

3. Stopped:完全隐藏,用户不可见,在后台。

其他状态会很快的过度到其他状态,比如系统调用onCreate()之后很快的调用了onStart(),然后很快的调用onResume()。

======================神奇的分割线=========================

用户在屏幕上选择了图标之后,系统会调用在应用中被标识位launcher或者main的activity,的onCreate()方法。


在AndroidManifest.xml文件中定义main 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>

如果应用程序没有定义这个的话,不会出现在应用程序列表中。
系统通过调用onCreate方法创建新的activity实例。

实现onCreate方法,必须实现基础的应用程序初始逻辑,这逻辑在整个生命周期中只运行一次。
比如:定义用户界面,一些类作用域变量。

用户可以看到界面,是调用了onStart(),但是很快就调用了onResume(),用户会一直停留在这个状态知道有事件打断。

=======================灰过去的分割线=================================

Activity的销毁

onDestroy,系统调用这个结束activity,并将它完全从系统内存中移除。
通常情况下不需要实现这个方法,因为局部的类的应用会随着activity销毁,而且activity应该在onPause()和onStop()中做了多数的清楚。
如果这个activity在onCreate方法中创建有后台线程,或者其他长时间运行的可能造成内存泄露的资源,那么在onDestory中应该kill它们。

在多是情况下,在调用onDestory之前,已经调用了onPause() onStop(),只有一种情况除外。
就是如果在onCreate中调用了finish(),如这个activity是暂时的,为了调用其他的activity。
那么系统会直接调用onDestory,而不会调用生命周期中的其他方法。

======================掉下来的分割线======================================

Pause Activity

onPause需要做的事情
1. 在暂停状态下不应该继续运行的行为,如播放视屏,停止动画或者一些一直运行的消耗CPU的行为
2. 存储信息,以防用户永远离开应用,只需要保存那些用户希望保存的信息,如邮件草稿,而不是说诸如表单中的信息,存储那些确定用户需要缓存的信息。
3. 是否系统资源,如GPS,释放那些可能影响电池生命周期,当暂停时用户不需要使用的资源。

应该避免在onPause中调用如读写数据库等消耗CUP资源的行为,这个会影响当前前台的activity。
这些操作应该在onStop中去做。

在暂停后,activity还是会停留在内存中,不需要在onResume中重新初始化组件。
用户回到暂停的程序,会调用onResume




Resume Activity

每次activity调用到前台都会调用onResume方法,包括第一次创建的时候。
在onResume中应该初始化在onPause中已经释放的组件,和必须每次都初始化的组件。比如动画和那些只有得到用户焦点才使用的组件。

==============================分割线==========================================

stop and restart

情景:
1. 用户通过应用程序管理器选择了另外的程序,之后又选回来
2. 用户在当前应用中起了一个新的activity,就的这个stop了,之后按了back按钮,就的就restart了
3. 用户接了个电话



stop了就肯定看不到了
需要释放所有用不到的资源,系统直接杀掉进程可能会用不到onDestory,所以需要确保这里已经释放了所有可能造成内存泄露的程序。
使用onStop去实现那些更大的,更消耗CPU的操作,如读写数据库。

从stop状态到start状态会调用onRestart
通常在restart的时候重新实例化。
将onStart作为onStop的一个副本。
比如:用户可能离开应用程序一个很长的时间,onStart是一个很好的地方用来检验需要的系统特性是不是可用。

======================华丽丽的分割线============================

每一次旋转屏幕,系统都会销毁activity,并且重建。
如系统资源不足,可能会被系统关闭,再打开就是recreate

默认的,系统会使用Bundle实例对象状态去保存每一个view对象。
如果需要保存更多的东西,使用onSaveInstanceState,如成员变量,用户进程追踪记录。
onSaveInstanceState中传递了一个Bundle对象。
当用户离开activity系统调用这个方法。

如果在系统销毁activity之后,重建,会将同样的Bundle对象,传递给onRestoreinstanceState。


每次重写onSaveInstanceState,都要调用父类的onSaveInstantceState确保系统自动保存相关状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值