Activity总结

Activity生命周期

Activity生命周期图示

BACK键:

当我们按Back键时,我们这个应用程序将结束,这时候将先后调用onPause()->onStop()->onDestory()三个方法。
再次启动App时,会执行onCreate()->onStart()->onResume()

HOME键:

当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,
这时候应用程序并没有销毁。而当我们从桌面再次启动应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法
注意:当Activity在后台时候,如果系统内存不够用,后台的Activity很有可能会被强制销毁回收内存的,那么一定会触发onSaveInstanceState(Bundle outState) 方法,我们可以把想保存的数据保存在 outState对象里,等Activity被重新创建执行onCreate(Bundle saveInstanceState) 从参数saveInstanceState再读取保存的数据

ActivityA 打开 ActivityB

Paste_Image.png

根据上图 可以看出,正常情况下依次是

  • A:onPause()
  • B:onCreate()
  • B:onStart()
  • B:onResume()
  • A:onStop()

但是,如果ActivityB的样式是Dialog样式,B没有完全遮挡A,ActivityB的生命周期跟刚才一样,但是ActivityA并没有执行onStop()

从ActivityB 返回 ActivityA

接着上面的,如果在处于ActivityB 界面按下back键,返回 ActivityA,生命周期如下:

Paste_Image.png

依次会执行:

  • B:onPause()
  • A:onRestart()
  • A:onStart()
  • A:onResume()
  • B:onStop()
  • B:onDestory()

Activity启动模式

  1. Standard模式(默认)
    每次开启,都会在任务栈中创建新的Activity实例
  2. SingleTop模式
    如果当前待开启的Activity正好位于栈顶,就复用,否则在任务栈中创建新的Activity实例
  3. SingleTask模式
    如果当前待开启的Activity已经存在,无论在栈中任何位置,都会将此位置上面的Activity全部移除,然后复用该Activity
  4. SingleInstance模式
    一个任务栈中只有一个Activity,并保证不再有其他

onNewIntent

当Activity不是Standard模式,并且被复用的时候,会触发onNewIntent(Intent intent) 这个方法,一般用来获取新的Intent传递的数据

我们一般会把MainAcitivy设置为SingleTask,除了保证MainActivity的唯一,还可以利用singleTask的特性做一些清理工作。自动管理栈,销毁无用的Acitivity.

Intent Flags

记住一点:Activity都是运行在任务栈里面,但如果要从广播接受者BordercastReceiver或者服务Service去启动一个Activity,必须为当前Activity创建一个新的任务栈才能正常显示

public class MyReceiver extends BroadcastReceiver{
   public void onReceive(Context context, Intent intent) {
      Intent intent=new Intent(context,DemoActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//创建新的任务栈
      context.startActivity(intent);
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载注明出处:http://www.jianshu.com/p/c2c2ee4eb48a 1. 简介 本篇不针对于...
    王三的猫阿德阅读 6,932评论 2 5
  • Activity概述 Activity 是一个应用组件。用户可与提供的屏幕进行交互。 每个 Activity 都会...
    媚竹风阅读 3,424评论 0 0
  • 这是我第三遍看《Android开发艺术探索》这本书了,从第一遍看的云里雾里,第二遍略微明白之后,我决定看第三遍,并...
    陈添阅读 4,348评论 2 8
  • 我这叫善良还是什么? 自己也不清楚 完全控制不了自己 很感恩很佩服自己上次期末考试和教资面试在一起却坚持着 平生第...
    考研狗的成长日记阅读 1,508评论 0 0
  • 噼里啪啦下个不停的雨终于过去啦。妖魔鬼怪们简直开心的不得了,更何况随着晴朗天气到来的是最好玩的合法捉弄人的日子——...
    大酉阅读 2,929评论 0 1