Activity的回顾(一)

Activity作为android的四大组件之一,可以说是我们接触最多的。在android中,Activity是人机交互的窗口,负责用户意图的获取以及数据的显示。

Activity的生命周期

对于activity,它的生命周期,是必须了解掌握的。首先,是官方图:
activity生命周期图

//Activity
public class CustomActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom);
        //一般在这个方法中加载布局。
    }

    @Override
    protected void onStart() {
        super.onStart();
        //此时,activity可见,但不在前台。
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 此时,activity可见,在前台,可与用户交互。Activity可见时,
        // 无论是新启动的,还是跳转回来的,都会执行这个方法。依据这个特性,
        // 我们可以把一些页面的--更新工作--放到这里来。
        // 比如,跳转回到这个activity,
        // 需要作一次网络请求以更新数据这样的操作。

    }

    @Override
    protected void onPause() {
        super.onPause();
        // Activity正在暂停。由于activity即将不可见,
        // 在这里可以做一些临时数据的存储工作,
        // 以便在之后onResume()的时候用到。
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Activity被摧毁。生命周期的最后一个回调,
        // 在这里,需要释放资源(比如动态绑定了广播,在这里就需要解绑)。

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        // Activity重新可见时,会调用
    }
}

关于几个方法的一些探索:

1.关于activity中函数的执行顺序

A可见状态下,启动另一个B,两个activity中的函数的执行顺序?
A.onPause()
B.onCreate()
B.onStart()
B.onResume()
A.onStop()

按下回退键返回A后,回调如下:
B.onPause()
A.onRestart()
A.onStart()
A.onResume()
B.onStop()
B.onDestroy()

2.Activity可见状态下,启动一个Dialog到前台?若是一个Activity样式的Dialog呢?

经实验,如果启动一个dialog,未引发Activity的生命周期。

若启动一个dialog样式的Activity,则触发如下:
A.onPause()
C.onCreate()
C.onStart()
C.onResume()
//注意,此时A并没有stop,仅仅只是pause了。

这时,如果按下回退键从而再返回到了A,则接下去回调如下:
C.onPause()
A.onResume()
C.onStop()
C.onDestroy()
//注意:这里A并没有onStop(),所以也就没有onRestart() onStart()

异常情况下的Activity生命周期

几种异常的情况:
1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建
2. 资源内存不足,导致优先级低的Activity被杀死
比如,默认情况下,Activity从竖屏转化为横屏,此时Activity会被销毁并重建。(参考自《Android开发艺术探索》)
此时,所调用的生命周期如下:
这里写图片描述

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //用来保存Activity的当前状态,会将Bundle对象传给
    //onCreate()、onRestoreInstanceState().
    // 因此,可以用俩个方法中的bundle参数来判断,activity是否被重建
    // (正常情况下,onCreate()中的参数savedInstanceState为null)。

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    //用来恢复数据
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值