Android 四大组件之Activity 总结

Activity 是应用用来和用户交互的窗口。
Activity 生命周期
Android 四大组件之Activity 总结_第1张图片
生命周期
  • Acitivity本质上有四种状态
    1.运行:activity处于前台用户可见,可操作。(即activity位于栈顶端)
    2.暂停:如果一个活动被另一个非全屏的活动所覆盖(比如一个Dialog),那么该活动就失去了焦点,它将会暂停(但它仍然保留所有的状态和成员信息,并且仍然是依附在WindowsManager上),在系统内存积极缺乏的时候会将它杀死。
    3.停止:如果一个活动被另一个全屏活动完全覆盖,那么该活动处于停止状态(状态和成员信息会保留,但是Activity已经不再依附于WindowManager了)。同时,在系统缺乏资源的时候会将它杀死(它会比暂停状态的活动先杀死)。
    4.重启:如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。
  • 生命周期

1.onCreate:与onDestroy配对,表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中可以做一些初始化的工作(加载布局资源、初始化Activity所需要的数据等),耗时的工作在异步线程上完成。
2.onRestart:表示Activity正在重新启动。一般情况下,在当前Activity从不可见重新变为可见的状态时onRestart就会被调用。这种情形一般是由于用户的行为所导致的,比如用户按下Home键切换到桌面或者打开了一个新的Activity(这时当前Activity会暂停,也就是onPause和onStop被执行),接着用户又回到了这个Activity,就会出现这种情况。
3.onStart:与onStop配对,表示Activity正在被启动,并且即将开始。但是这个时候要注意它与onResume的区别。两者都表示Activity可见,但是onStart时Activity还正在加载其他内容,正在向我们展示,用户还无法看到,即无法交互。
4.onResume:与onPause配对,表示Activity已经创建完成,并且可以开始活动了,这个时候用户已经可以看到界面了,并且即将与用户交互(完成该周期之后便可以响应用户的交互事件了)。
5.onPause:与onResume配对,表示Activity正在暂停,正常情况下,onStop接着就会被调用。在特殊情况下,如果这个时候用户快速地再回到当前的Activity,那么onResume会被调用(极端情况)。一般来说,在这个生命周期状态下,可以做一些存储数据、停止动画的工作,但是不能太耗时,如果是由于启动新的Activity而唤醒的该状态,那会影响到新Activity的显示,原因是onPause必须执行完,新的Activity的onResume才会执行。
6.onStop:与onStart配对,表示Activity即将停止,可以做一些稍微重量级的回收工作,同样也不能太耗时(可以比onPause稍微好一点)。
7.onDestroy:与onCreate配对,表示Activity即将被销毁,这是Activity生命周期的最后一个回调,我们可以做一些回收工作和最终的资源释放(如Service、BroadReceiver、Map等)。

Activity 实际应用
  • 正常情况下一个activity的生命周期
demo.com E/LOG: onCreate
demo.com E/LOG: onStart
demo.com E/LOG: onResume
demo.com E/LOG: onPause
demo.com E/LOG: onStop
demo.com E/LOG: onDestroy
  • 非正常情况下 activity 生命周期
  1. 横竖屏切换
  • 默认情况横竖屏切换
demo.com E/LOG: onCreate
demo.com E/LOG: onStart
demo.com E/LOG: onResume
demo.com E/LOG: onPause
demo.com E/LOG: onSaveInstanceState
demo.com E/LOG: onStop
demo.com E/LOG: onDestroy
demo.com E/LOG: onCreate
demo.com E/LOG: onStart
demo.com E/LOG: onResume
  • AndroidManifest.xml中加入配置

android:configChanges="orientation|keyboardHidden" [api3.2之前]
android:configChanges="orientation|keyboardHidden|screenSize" [api3.2之后] 界面方向以及大小的改变不需要重建

横竖屏切换的时候不会创建新的activityapi3.2但是会调用onConfigurationChanged()方法可在里面做一些适配或者修改:

切换横屏调用onConfigurationChanged 一次
切换竖屏调用onConfigurationChanged 一次

06-28 17:12:34.370 12514-12514/demo.com E/LOG: onCreate
06-28 17:12:34.373 12514-12514/demo.com E/LOG: onStart
06-28 17:12:34.373 12514-12514/demo.com E/LOG: onResume
06-28 17:12:36.297 12514-12514/demo.com E/LOG: onConfigurationChanged
06-28 17:12:41.526 12514-12514/demo.com E/LOG: onConfigurationChanged
Activity 启动模式

具体介绍 来自Carson_Ho

  • 如下图 ↓


    Android 四大组件之Activity 总结_第2张图片
    image

    通俗讲解

  • 如下图 ↓


    Android 四大组件之Activity 总结_第3张图片
    image

区别

  • 如下图


    Android 四大组件之Activity 总结_第4张图片
    image
如何设置启动模式

通过设置ActivityManifest


通过Intent设置标志位

Intent inten = new Intent (ActivityA.this,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

标记位属性

标记属性 含义
FLAG_ACTIVITY_SINGLE_TOP 指定启动模式为栈顶复用模式(SingleTop)
FLAG_ACTIVITY_NEW_TASK 指定启动模式为栈内复用模式(SingleTask)
FLAG_ACTIVITY_CLEAR_TOP 所有位于其上层的Activity都要移除,SingleTask模式默认具有此标记效果
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上

两种方式的区别

  • 优先级
    Intent设置方式的优先级 > Manifest设置方式
  • 限定范围不同
    Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP;Intent设置方式 无法设置单例模式(SingleInstance)
Activity之间通讯
  • activity之间通过intent来进行通讯
// 在AActivity中启动BActivity 并传递参数parameter1 和parameter2 给BActivity
Intent intent = new Intent(AActivity.this, BActivity.class);
intent.putExtra("parameter1", parameter1);
intent.putExtra("parameter2", parameter2);
startActivity(intent);
// 在BActivity中获取AActivity中传递过来的参数
parameter1= getIntent().getStringExtra("parameter1");
parameter2= getIntent().getStringExtra("parameter2");

你可能感兴趣的:(Android 四大组件之Activity 总结)