手记

Android学习之activity用法举例

  1. Activity入门
    1,Activity生命周期中的四个状态
    活动状态:即该activity处于前台,用户可见,并获得焦点
    暂停状态:其他的activity或者Dialog位于前台,该activity任可见,但没有焦点
    停止状态:activity不可见,失去焦点
    销毁状态:activity所在的Dalvik进程被结束
    2,Activity完整生命周期内的7个回调方法
    情形1:只有一个activity
    这里包含了3个关键的生命周期循环:
    a,从oncreate()到OnDestory()的完整生命周期
    b,从onStart()到OnStop()的可视生命周期
    c,从onResume()到onPause()的前台生命周期,注意:这两个方法中的代码应该是轻量级的。
    情形2:多个activity
    这里回调方法的执行顺序,都是在第一个activity的onpause()方法与onstop()方法之间开启第二个activity;
    手机横屏的时候:会销毁当前的activity,然后重新创建。
    3.activity的两种启动方式:显式和隐式(打开系统的activity)
  2. Activity中级
    1,在activity之间传递信息
    a,intent传递;
    b,Bundle传递基本数据类型的数据,还可以使用Bundle传递一个可以序列化的对象,使用putSerializable()或者一个小的Bitmap;但是Bundle传递数据是有大小限制的<0.5M。
    2,activity的启动模式:
    任务栈:简单说 就是一个存储activity的集合,便于activity回退管理。
    standard:只要来一个startActivity()就会创建一个activity;
    singtop:和standard相比,如果待启动的activity处于栈顶,就不创建,其余的情况,都同standard模式;
    后两种都是单实列模式:
    singtask:和singtop不同的是,如果待启动的activity处于栈顶,直接调用onNewIntent()方法,不在栈顶则弹去栈中该activity之上的所有activity。
    singInstance:A启动B,B为singInstance模式,会为B创建一个新的任务栈,再从B回到A,会重新创建A,而再次回到B,只是会调用onnewIntent()方法。
    总结:对于使用standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。当活动的启动模式指定为 singleTop, 在启动活动时如果发现返回栈的栈顶已经是该活动, 则认为可以直接使用它,不会再创建新的活动实例。不过当 FirstActivity 并未处于栈顶位置时,这时再启动 FirstActivity,还是会创建新的实例的。使用singleTop 模式可以很好地解决重复创建栈顶活动的问题,但是如果该活动并没有处于栈顶的位置,还是可能会创建多个活动实例的。当活动的启动模式指定为 singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
    3,关于activity的销毁
    当一个活动进入到了停止状态,是有可能被系统回收的。那么想象以下场景,应用中有一个活动 A,用户在活动 A 的基础上启动了活动 B,活动 A 就进入了停止状态,这个时候由于系统内存不足,将活动 A 回收掉了,然后用户按下 Back 键返回活动A, 会出现什么情况呢?其实还是会正常显示活动 A的, 只不过这时并不会执行 onRestart()方法,而是会执行活动 A 的 onCreate()方法,因为活动 A 在这种情况下会被重新创建一次。
    对于上面的情况,那么就面临这样的一个问题:即上一个活动的数据也就随之丢失。
    解决办法:对于这种情况,Activity 提供了一个 onSaveInstanceState()回调方法,这个方法会保证一定在活动被回收之前调用, 因此我们可以通过这个方法来解决活动被回收时数据得不到保存的问题。(注意:只能用于activity意外退出的情形,如果我们显示的终止一个activity系统并不会调用该方法)
    eg:在 MainActivity 中
    @Override
    protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    String data= "Hello";
    outState.putString("data", data);
    }
    而在oncreate()方法中我们可以重新获得被保存的数据。
4人推荐
随时随地看视频
慕课网APP