android:Activity-生命周期


在系统中的 Activity 被一个 Activity 栈所管理。当一个新的 Activity 启动时,将被放置到栈顶,成为运行中的 Activity ,前一个 Activity 保留在栈中,不再放到前台,直到新的 Activity 退出为止。
A ctivity的 生命周期有七部分 ,如下灰色矩框所示:( 这张图是从 android 的帮助文档中截出来的

在上图中, Activity 有三个关键的循环:
  1 、整个的生命周期,从 onCreate(Bundle) 开始到 onDestroy() 结束。 Activity onCreate() 设置所有的 全局 状态,在 onDestory() 释放所有的资源。例如:某个 Activity 有一个在后台运行的线程,用于从网络下载数据,则该 Activity 可以在 onCreate() 中创建线程 , onDestory() 中停止线程
2 、可见的生命周期,从 onStart() 开始到 onStop() 结束。 在这段时间,可以看到 Activity 在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的 UI 数据和资源等,例如:可以在 onStart 中注册一个 IntentReceiver 来监听数据变化导致 UI 的变动,当不再需要显示时候,可以在 onStop() 中注销它。 onStart() onStop() 都可以被多次调用,因为 Activity 随时可以在可见和隐藏之间转换
3 、前台的生命周期,从 onResume() 开始到 onPause() 结束。 在这段时间里,该 Activity 处于所有  Activity 的最前面,和用户进行交互。 Activity 可以经常性地在 resumed paused 状态之间切换,例如:当设备准备休眠时,当一个  Activity 处理结果被分发时,当一个新的 Intent 被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。
Method
Description
Next
在你第一次创建该activity时调用,可以在这里做该activity的初始化设置
onStart()
  。
在activity onStop()后重新显示时调用,后面跟着onStart()
onStart()
在activity变的可见时调用
onResume() or onStop()
在activity与用户交互时调用(activity获得焦点),此时该activity位于栈的顶端
onPause()
暂停状态,在将有另一个activity遮挡在该activity前边的时候调用,此时activity失去焦点不能与用户交互,但仍然可见,此时系统可以将该 Activity 从内存中删除
onResume() or
onStop()
停止状态,在将有另一个activity完全遮挡在该activity前边时调用,此时activity完全不可见,此时系统可以将该 Activity 从内存中删除
onRestart() or
onDestroy()
Activity结束时调用
nothing
Activity 有四种本质区别的状态:
1   在屏幕的前台( Activity 栈顶) ,叫做 活动状态 或者 运行状态 active or running
2   如果一个 Activity 失去焦点,但是依然可见 (一个新的非全屏的 Activity 或者一个透明的 Activity 被放置在栈顶),叫做 暂停状态(Paused) 。一个暂停状态的 Activity 依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被杀掉。
  3 、如果一个 Activity 被另外的 Activity 完全覆盖掉 ,叫做 停止状态(Stopped) 。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候, Stopped Activity 将被杀掉。
  4 、如果一个 Activity Paused 或者 Stopped 状态 ,系统可以将该 Activity 从内存中删除, Android 系统采用两种方式进行删除,要么要求该 Activity 结束,要么直接杀掉它的进程。当该 Activity 再次显示给用户时,它必须重新开始和重置前面的状态。
当ActivityA被另外一个 ActivityB 抢走焦点时,再从B回到A时,可能发生以下两种过程:
  1. 如果ActivityB是小窗口,不能完全遮挡ActivityA时:
A会调用onPause()方法,此时从B回到A只需要调用A的onResume()。

  1. 如果ActivityB完全遮挡ActivityA时:
A会调用onPause() >onStop()方法,此时从B回到A需要调用A的onRestart() >onStart() >onResume()

可以用如下案例在日志中来观看activity的生命周期:
public class MainActivity extends Activity {
   
    private static final String TAG = "ActivityDemo" ;
    @Override
    protected void onCreate (Bundle savedInstanceState) {
       super .onCreate(savedInstanceState);
      setContentView(R.layout. activity_main );
      Log. e ( TAG , "start onCreate" );
   }
   
    @Override
    public boolean onCreateOptionsMenu (Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu. main , menu);
       return true ;
   }
   
    @Override
    protected void onStart () {
       // TODO Auto-generated method stub
       super .onStart();
      Log. e ( TAG , "start onStart" );
   }
   
    @Override
    protected void onRestart () {
       // TODO Auto-generated method stub
       super .onRestart();
      Log. e ( TAG , "start onRestart" );
   }
    @Override
    protected void onPause () {
       // TODO Auto-generated method stub
       super .onPause();
      Log. e ( TAG , "start onPause" );
   }
    @Override
    protected void onResume () {
       // TODO Auto-generated method stub
       super .onResume();
      Log. e ( TAG , "start onResume" );
   }
    @Override
    protected void onStop () {
       // TODO Auto-generated method stub
       super .onStop();
      Log. e ( TAG , "start onStop" );
   }
    @Override
    protected void onDestroy () {
       // TODO Auto-generated method stub
       super .onDestroy();
      Log. e ( TAG , "start onDestroy" );
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值