Activity主要有三个状态:

当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运行的状态。它就是相应用户操作的Activity。

当它失去焦点但仍然对用户可见时,它处于暂停状态。即:在它之上有另外一个Activity。这个Activity也许是透明的,或者未能完全遮蔽全屏, 所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器),但当系统处于极 低内存的情况下,仍然可以杀死这个Activity。

如果它完全被另一个Activity覆盖时,它处于停止状态。它仍然保留所有的状态和成员信息。然而它不再为用户可见,所以它的窗口将被隐藏,如果其他地方需要内存,则系统经常会杀死这个Activity。

API里Activity的生命周期图:

Activity继承了ApplicationContext这个类,Activity的生命周期由下面七个方法实现:

public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }

在学习Activity的生命周期时,为了更好理解Activity的生命周期,我基本重写了这七个方法,并用 android.util.log这个类的静态方法打印出来, 这个类相当的简单易用,因为它提供的全是一些静态方法:

Log.v(String tag, String msg); //VERBOSE Log.d(String tag, String msg); //DEBUG Log.i(String tag, String msg); //INFO Log.w(String tag, String msg); //WARN Log.e(String tag, String msg); //ERROR

下面是重写后的两个Activity的代码清单:FirstActivity

package blog.activity.demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class FirstActivity extends Activity { private final static String TAG = "FIRSTACITVITY"; private Button myButton; @Override public void onCreate(Bundle savedInstanceState) { Log.v(TAG, "FirstAcvity ---> onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton = (Button)findViewById(R.id.myButton); myButton.setText("启动第二个Activity"); myButton.setOnClickListener(new ButtonOnClickListener()); } @Override protected void onDestroy() { // TODO Auto-generated method stub Log.v(TAG, "FirstAcvity --->onDestory"); super.onDestroy(); } @Override protected void onPause() { // TODO Auto-generated method stub/ Log.v(TAG, "FirstAcvity --->onPause"); super.onPause(); } @Override protected void onRestart() { // TODO Auto-generated method stub Log.v(TAG, "FirstAcvity --->onRestart"); super.onRestart(); } @Override protected void onResume() { // TODO Auto-generated method stub Log.v(TAG, "FirstAcvity --->onResume"); super.onResume(); } @Override protected void onStart() { // TODO Auto-generated method stub Log.v(TAG, "FirstAcvity --->onStart"); super.onStart(); } @Override protected void onStop() { // TODO Auto-generated method stub Log.v(TAG, "FirstAcvity --->onStop"); super.onStop(); } class ButtonOnClickListener implements OnClickListener{ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(FirstActivity.this,SecondActivity.class); FirstActivity.this.startActivity(intent); } } }

SecondActivity:

package blog.activity.demo; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class SecondActivity extends Activity { private final static String TAG = "SECONDACITVITY"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub Log.v(TAG, "FirstAcvity ---> onCreate"); super.onCreate(savedInstanceState); } @Override protected void onDestroy() { // TODO Auto-generated method stub Log.v(TAG, "SecondActivity --->onDestory"); super.onDestroy(); } @Override protected void onPause() { // TODO Auto-generated method stub Log.v(TAG, "SecondActivity--->onPause"); super.onPause(); } @Override protected void onRestart() { // TODO Auto-generated method stub Log.v(TAG, "SecondActivity--->onRestart"); super.onRestart(); } @Override protected void onResume() { // TODO Auto-generated method stub Log.v(TAG, "SecondActivity--->onResume"); super.onResume(); } @Override protected void onStart() { // TODO Auto-generated method stub Log.v(TAG, "SecondActivity--->onStart"); super.onStart(); } @Override protected void onStop() { // TODO Auto-generated method stub Log.v(TAG, "SecondActivity--->onStop"); super.onStop(); } }

代码没什么特别的,运行工程效果图如下:

重点在Logcat视窗里,打开应用时先后执行了onCreate()->onStart()->onResume三个方法,看一下LogCat视窗如下:

当点击启动到第二个Activity时,FirstActivity执行了onPause->onStop,SecondActivity执行了onCreate()->onStart()->onResume方法,看Logcat视窗:

BACK键:

当按BACK键时,返回FirstActivity,这时候FirstActivity不是调用onCreate()->onStart()->onResume三个方法,而是调用onReStart->onStart->onResume,如下图所示:

而SecondActivity一次调用了onPause->onStop->onDestory,看图:

这样基本可以看到Activity的生命周期了,虽然有些还是有点不明了,但基本可以理解了

Android Activity生命周期以及LoCat的使用相关推荐

  1. Android Activity 生命周期详解及监听

    前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...

  2. Android activity 生命周期(一)

    Android activity 生命周期(一) 转载请注明出处:http://blog.csdn.net/chenlinfeng772885775/article/details/53672919 ...

  3. Android activity生命周期

    这篇博客主要包含以下知识点: activity介绍. activity生命周期的详细过程(不同情况下的变化以及状态的改变).finish和onDestory方法的关系.onSaveInstanceSt ...

  4. Android Activity生命周期举例说明(图文)

    同学电话面试提及到Activity生命周期的详细说明,现整理如下: 转载请标明姓名及出处:大飞_Rflyee - http://blog.csdn.net/rflyee/article/details ...

  5. android activity生命周期_Android岗高频面试题合一集,看你能答出几题?

    前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...

  6. android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...

    Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...

  7. Android Activity 生命周期和重要的相关函数(基础一)

    总结: 1.oncreate 2.onstart            可见但不交互 3.onrestart         从其他界面重新调转过来 4.onresume       可交互 5.on ...

  8. xamarin Android activity生命周期详解

    学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...

  9. Android Activity生命周期管理

    http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...

  10. 04 Android Activity生命周期

    文章目录 1 Activity 生命周期 1.1 生命周期 1.2 Android 开发的规则 2 设备配置变化,Activity被销毁 3 进出停止态 3.2 进出停止态的过程 4 进出暂停态 4. ...

最新文章

  1. gpg加密命令 linux_用 PGP 保护代码完整性(五):将子密钥移到一个硬件设备中 | Linux 中国...
  2. 数据挖掘与分析 - 用JS实现推荐系统的原理与开发
  3. @字王2012·纵变体系列,共12款
  4. Wpf拖动按钮实现(二)
  5. Linux下安装jdk1.6和tomcat
  6. linux 创建wifi 热点_Linux创建无线WIFI热点 2.4g/5g
  7. C++ #define参数问题
  8. 【LeetCode】【refine 3】题号:*3. 无重复字符的最长子串
  9. ssm返回oracle序列,SSM之JSON通用返回格式
  10. java后端分页查询_java后端分页方案
  11. NFC bcm2079x驱动学习 .
  12. IMAGE_IMPORT_DESCRIPTOR
  13. PS去水印的四种方式
  14. The word ‘localhost‘ is not correctly spelled 这个问题怎么解决
  15. 201871010134-周英杰《面向对象程序设计(java)》第一周学习总结
  16. 计算机维修轿车,解决方案:轿车电脑故障维修两例
  17. c# 的取负数_c# – 负数范围可枚举
  18. 稳扎稳打JS——执行上下文
  19. 计算机组装与维修教学重点,计算机组装与维修教学大纲.pdf
  20. 2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细)

热门文章

  1. 怎样的100位区块链开发者,入选这份严苛至极的特训名单?
  2. 2021:医学视觉问答的多元模型量化Multiple Meta-modal Quantifying for Medical Visual Question Answering
  3. 单片机c语言msb全称,51单片机英文缩写全称(整理最全)
  4. 英语数字转换器(POJ NO.1123)
  5. 【Java教程】UDP实现群聊聊天室
  6. windows基线加固
  7. itmo大学计算机专业,【俄罗斯圣光机大学访学】计算机学院ITMO交流访学团
  8. URAL 1069 Prufer Code(模拟)
  9. 更改Linux终端用户名显示颜色的PS1的用法
  10. 全面解读流程图|附共享单车摩拜ofo案例分析