zoukankan      html  css  js  c++  java
  • android Activity生命周期

    Android系统会跟着所有运行的Activity对象,它将这些对性放在一个栈中进行管理。当一个新的Activity启动时,处于栈顶的Activity会暂停,而这个新的Activity会放入到栈顶,当这一新的Activity完成时,它会从栈中被移除,而先前的Activity会回到栈顶。如下图:



    Android的Activity生命周期如下图描述:

    onCreate:Activity启动时调用的第一个方法。在此方法中有一个参数,即Bundle,在首次启动时,这个参数为null,当程序由于内存的原因而被杀掉的时候,如果用户在onSaveInstanceState方法中做了相应的状态保存的操作的话,那个当他再次重新启动的时候,这个Bundle就包含了先前在onSaveInstanceState方法中保存的状态信息,以便Activity回到先前的状态。

    onStart:当用户对Activity可见时,此方法调用。

    onResume:在此方法中主要用于接收Activity数据和进行一些列的初始化操作。当Activity到达栈顶的时候,即将成为前台进程时,此方法被调用,虽然这一个时刻Activity肯能还不为用户所见,但这里是获取资源的最佳场所。

    onPause:当另一个Activity被移至栈顶的时候,当前Activity会收到它已在栈中被下移的通知,此时调用onPause方法。onPause方法是Activity在后台最后一次能够有机会进行清理工作、释放无需资源的地方。Activity的onPause方法必须要尽快的执行完成,因为前台的Activity必须要等到它执行完成之后返回后才能启动。当当前Activity失去焦点只有部分界面可见的时候,也会调用onPause方法。

    onStop:当另一个Activity被恢复而完全遮住当前Activity界面的时候,onStop被调用。

    onDestroy:Activity生命周期的最后一个方法,当调用finish方法或由于内存原因被系统杀死后会依次调用onPause——>onStop——>onDestroy方法,来结束Activity生命周期。

    注意:可以根据isFinishing方法来判断是由于调用了finish方法而结束Activity还是由于内存原因被系统杀死的。

        通过调用finish方法结束的Activity会从Activity栈中弹出,而由于系统内存原因结束的Activity不会从栈中弹出,依然会保留在栈中,因为在用户点击返回按钮的时候,它还 是有可能需要在恢复到前页面的。


    为了避免Activity对象被销毁,应该尽可能的在onPause方法中释放尽可能多的资源,那么转入后台时被销毁的可能性就越低。


    当Activity由于内存原因被销毁的时候,可以通过使用onSaveInstanceState方法将状态信心保存在一个Bundle对象中,当Activity恢复时此Bundle会做为参数传入到onCreate方法中,以便界面回复到之前的状态。

  • 相关阅读:
    Java NIO学习笔记---I/O与NIO概述
    JAVA多线程和并发基础面试问答
    Java线程面试题 Top 50
    Java并发编程:Timer和TimerTask
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:线程池的使用
    Java并发编程:阻塞队列
    程序猿写客户端,没有视觉设计师,怎么搞到图?
    hm nsis edit请求的操作需要提升
    MFC修改系统托盘的图标
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3167685.html
Copyright © 2011-2022 走看看