Android四大组件-Activity

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzhworld/article/details/83443862

目录

Activity

一、Activity生命周期

二、常见情况:

启动问题:

回收问题:Activity被回收的情况可能如下:

回收后数据存储问题:成对出现的onSaveInstanceState、onRestoreInstanceState

Activity配置问题:为了让Activity不重新创建

Activity属性设置:

Activity启动的设置:

Activity启动模式、任务栈:


Activity

一、Activity生命周期

onCreate 进行初始化,比如用setContentView加载布局
onStart Activity由不可见变为可见,不在前台、不可交互
onResume Activity位于返回栈的栈顶,出钱在前台可交互
onPause Activity不可交互,当启动一个透明的Activity时部分被遮挡住了,所以被挡住的Activity会在此声明周期
onStop Activity有可见变为不可见
onDestory 销毁Activity并释放资源

相信大家学Android Activity第一个接触到的就是这一个生命周期,那么想要更好掌握,最好的办法就是自己在写代码中去体会,一下列一下几个常见的情况:

二、常见情况:

  1. 启动问题:

    1. A启动B之后,A.onPause->B.onCreate->B.onStart->B.Resume->A.onStop,这个生命周期A需要等B启动完之后才stop,因为Pause完之后A仍然可见,保证不会因此黑屏
    2. A启动另一个活动B、C获得数据返回,可以使用startActivityForResult(intent,requestCode)方法,在OnActivityResult(RequestCode,resultCode,intent),这两个方法主要处理返回的数据,RequestCode可以用来识别是哪个控件(按钮)启动B活动,而resultCode可以用来识别是哪个活动(B、C)返回的数据,具体使用可见https://www.cnblogs.com/linjiqin/archive/2011/06/03/2071956.html
  2. 回收问题:Activity被回收的情况可能如下:

    1. 按Home键回到主页
    2. 启动其他Activity,长期在后台
    3. 旋转屏幕
    4. 按下电源按键
    5. PS:返回键是直接finish掉Activity
    6. 这些情况中如旋转屏幕的生命周期是活动杀死后重新启动
  3. 回收后数据存储问题:成对出现的onSaveInstanceState、onRestoreInstanceState

    1. onSaveInstanceState是因为不小心被回收之后被调用保存数据,如上几种情况。保证用户返回后恢复之前的视图数据,
    2. onRestoreInstanceState不一定会被调用,因为当很快恢复而活动未被杀死的时候此时这个方法不会被调用
    3. 恢复的视图需要设置id,在源码中恢复视图需要通过id找到对应的视图,如果没id则恢复不了
  4. Activity配置问题:为了让Activity不重新创建

    1. 与前几点有点关系,在configChanges设置是为了保证有变动是Activity不会重启导致数据变动
    2. 我们先看相对应的属性:
    3. 上面的属性中我们可以看到会影响到活动重启的情况有屏幕旋转、键盘的隐藏,为了保证发生这些情况不会重启活动,我们通常这样设置android:configChanges=“orientation”,用得比较多的是locale、orientation、keyboardHidden三个属性
  5. Activity属性设置:

    1. windowSoftInputMode:键盘的设置https://www.jianshu.com/p/0ad76e854a8e
    2. android:taskAffinity只有通过标志位为FLAG_ACTIVITY_NEW_TASK的Intent启动Activity时,该Activity的这个属性才会生效,系统才会将具有相同Task亲和力的Task切换到前台,然后启动该Activity,否则该Activity仍然运行在启动它的Task中。http://wangkuiwu.github.io/2014/06/26/OtherModeAttrs/
  6. Activity启动的设置:

    1. Activity中的icon、label用来设置新启动的活动,但是还是属于同一个应用,

    2. action、Catetory属性:详见https://www.jianshu.com/p/1a818d178099https://www.cnblogs.com/sevenyuan/archive/2013/03/22/2974960.htmlhttps://blog.csdn.net/andie_guo/article/details/9271973https://juejin.im/entry/5a65955d5188257329148ca5

      1. android.intent.action.MAIN决定应用程序最先启动的Activity ,是程序的入口android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里.

      2. data匹配:有miniType和Uri组成,同时需要用miniType和Uri时,使用setDataAndType, setType() 会将URL设为null; setData()会将mineType设为null

      3. 这一块的内容主要涉及到启动那一个哪个活动、显隐式启动的问题,通过action、category可以匹配到具体哪个活动来启动。

  7. Activity启动模式、任务栈:

    1. Activity启动顺序什么的是安排在一个任务栈之中,任务栈会影响到当按后退按钮上一个activity是弹出哪一个。

      1. standard:可重复

      2. singleTop:栈顶不能重复

      3. singleTask:任务栈中只能有一个

      4. singleInstance:新建一个任务栈,不能重复

    2. 也可使用Flags来启动:

      1. Intent.FLAG_ACTIVITY_NEW_TASK:使用一个新的task来启动Activity,一般在service中启动Activity

      2. Intent.FLAG_ACTIVITY_SINGLE_TOP:singleTop

      3. Intent.FLAG_ACTIVITY_CLEAR_TOP:singleTask

      4. Intent.FLAG_ACTIVITY_NO_HISTORY:当启动其他Activity之后就清理

    3. https://www.jianshu.com/p/b3a95747ee91

    4. 当在任务栈中启动已经存在的Activity,会调用其onNewIntent()方法,可以在此处理一些东西

猜你喜欢

转载自blog.csdn.net/wzhworld/article/details/83443862