版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android 之 Activity 生命周期史无前例的详细介绍, 新手 必必必看。Android 的 Activity 生命周期是一个非常重要的知识点, 但是 由于 Activity 的状态众多,而且状态直接的切换类型也十分 的众多,导致Activity 的方法很多,这就给新手学习并理解Activity 造成了一定的难度,如果你能认真读完我这一篇博 文,那么我相信你一定能对Activity 的理解达到一个崭新的高度,ok ,下面是我对Activity 的理解。要想透彻的理解 Activity ,那么必须了解一个计算机的名词,“堆栈” , 因为 Activity 的状态切换方式十分类似于数据结
2、构中的堆栈。1、首先介绍什么是堆栈,及其特点。2、介绍Activity 的七个状态方法。结合堆栈, 详解 Activity 状态直接的切换和各个方法的调用。、下面我来介绍一下什么是“堆栈” 。堆栈 可以简单的理解成一个的 “竹筒” ,只不过种竹筒是一端封闭另一端开启的,如图所示:透过这个竹筒我们不难发现,因为堆栈的一端是封闭的,所以要想往里面放东西,必须从一端放,取的时候也只能从一端取,就是这 堆栈最重要的特点, “后进先出” 。、下面我要介绍的是Activity 的七个状态方法。附官方文档图一张:然后附我代码一篇:package cn.blue.life;import android.app
3、.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 LifteActivity extends Activity Button bt;protected void onCreate(Bundle savedInstanceState) super.onCre
4、ate(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText( 第一个 activity);bt.setOnClickListener(new OnClickListener() public void onClick(View v) Intent intent=newIntent(LifteActivity.this,LifteActivitySecond.class);startActivity(intent););Log.i(Myta
5、g,FirstonCreate);protected void onDestroy() Log.i(Mytag,FirstonDestroy);super.onDestroy();protected void onPause() Log.i(Mytag,FirstonPause);super.onPause();protected void onRestart() Log.i(Mytag,FirstonRestart);super.onRestart();protected void onResume() Log.i(Mytag,FirstonResume);super.onResume();
6、protected void onStart() Log.i(Mytag,FirstonStart);super.onStart();protected void onStop() Log.i(Mytag,FirstonStop);super.onStop();/ protected void onRestoreInstanceState(Bundle savedInstanceState) /Log.i(Mytag,First onRestoreInstanceState);/super.onRestoreInstanceState(savedInstanceState);/ / prote
7、cted void onSaveInstanceState(Bundle outState) /Log.i(Mytag,First onSaveInstanceState);/super.onSaveInstanceState(outState);/ onCreate(Bundle savedInstanceState) onStart() onResume() onPause() onStop() onDestroy() onRestart() onCreate(Bundle savedInstanceState)Activity 的初始化, 也就是一个全新的 Activity 开始时, 调
8、用该方法onStart()Activity 的启动,当你能够看到 Activity 时,启动该方法,onResume()当 Activity 获取用户焦点将要与用户交互时调用此方法,此时 activity 在 activity 栈的栈顶,用户输入已经可以传递给它onPause()当系统要启动一个其他的 activity 时调用(其他的 activity 显示之前) ,这个方法被用来提交那些持久数据的改变、停止动画、和其他占用 CPU 资源的东西。由于下一个activity 在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。如果 activity 重新回到前景时将调用
9、onResume(), 如果对用户彻底不可见则会调用onStop() 。onStop()当另外一个activity 恢复并遮盖住此activity, 导致其对用户不再可见时调用。一个新activity 启动、其它activity 被切换至前景、当前activity 被销毁时都会发生这种场景。当 activity 重新回到前景与用户交互时调用 onRestart() , 如果activity 将退出则调用 onDestory() 。onDestroy()在你的 activity 被销毁前所调用的最后一个方法,当进程终止时会出现这种情况onRestart()当 activity 从停止状态重新启动
10、时调用。其后调用onResume()。 3) 、结合堆栈,详细介绍Activity 的生命周期和状态切换;下面附上我三个Activity 的代码,嘎嘎,package cn.blue.life;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;p
11、ublic class LifteActivitySecond extends Activity Button bt;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText( 第二个 activity);bt.setOnClickListener(new OnClickListener() public void
12、 onClick(View v) Intent intent=newIntent(LifteActivitySecond.this,LifteActivityDialog.class);startActivity(intent););Log.i(Mytag,Second-onCreate);protected void onDestroy() Log.i(Mytag,Second-onDestroy);super.onDestroy();protected void onPause() Log.i(Mytag,Second-onPause);super.onPause();protected
13、void onRestart() Log.i(Mytag,Second-onRestart);super.onRestart();protected void onResume() Log.i(Mytag,Second-onResume);super.onResume();protected void onStart() Log.i(Mytag,Second-onStart);super.onStart();protected void onStop() Log.i(Mytag,Second-onStop);super.onStop();protected void onRestoreInst
14、anceState(BundlesavedInstanceState) Log.i(Mytag,SecondonRestoreInstanceState);super.onRestoreInstanceState(savedInstanceState);protected void onSaveInstanceState(Bundle outState) Log.i(Mytag,SecondonSaveInstanceState);super.onSaveInstanceState(outState);package cn.blue.life;import android.app.Activi
15、ty;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 LifteActivityDialog extends Activity Button bt;protected void onCreate(Bundle savedInstanceState) super.onCrea
16、te(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText(一个小对话框”);bt.setOnClickListener(new OnClickListener() public void onClick(View v) Intent intent=newIntent(LifteActivityDialog.this,LifteActivity.class);startActivity(intent););Log.i(Mytag,Dialo
17、g-onCreate);protected void onDestroy() Log.i(Mytag,Dialog-onDestroy);super.onDestroy();protected void onPause() Log.i(Mytag,Dialog-onPause);super.onPause();protected void onRestart() Log.i(Mytag,Dialog-onRestart);super.onRestart();protected void onResume() Log.i(Mytag,Dialog-onResume);super.onResume
18、();protected void onStart() Log.i(Mytag,Dialog-onStart);super.onStart();protected void onStop() Log.i(Mytag,Dialog-onStop);super.onStop();protected void onRestoreInstanceState(BundlesavedInstanceState) Log.i(Mytag,DialogonRestoreInstanceState);super.onRestoreInstanceState(savedInstanceState);protect
19、ed void onSaveInstanceState(Bundle outState) Log.i(Mytag,DialogonSaveInstanceState);super.onSaveInstanceState(outState);先启动第一个Activity ,看一下效果我们到看地第一个Activity 的启动,调用了三个方法,分别是, onCreate(),onStart(),onResume(),他们分别表示初始化 Activity , 显示 Activity , 获取用户焦点,可以进行操作。堆栈图:现在,我们有三种操作方式,分别是:一,点击后退键;二,点击 home 键;三,启动第二个Activity ;我给大家一一分析这三种情况:第一种情况,后退键,将会把最顶层的 Activity 一从堆栈中移除,的直接销毁启动到退出,一共执行了 6 个方法,这就是Activity 的生命周期,最简单,最正常的,没有任何打断的生命周期,但是就像人一样,难免会生个病,出个车祸什么的,所以,下面介绍第二种和第三种;上图是我点击了 home 键之后的执行结果,我们看到又执行了两个方法,分别是onPause和onStop,但是并没有onDestroy ,说明Activity 并没有被杀掉;而是留在了堆栈之中,处于一种不可见的状态,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件开发二手房买卖合同样本
- 城市排水招投标廉洁合同模板
- 墙绘装饰施工合同
- 新能源项目招投标合同风险防范
- 房屋户外照明安装合同
- 教育培训机构装修施工合同
- 国际实验室地暖系统安装工程合同
- 劳动合同签订与解除规范
- 水利工程建造师聘用合同范例
- 交通运输设备维修合同
- 血液透析室对血透过程中患者低血压原因分析品管圈鱼骨图柏拉图
- 采购部门工作计划书
- 翻译策略完整
- GB/T 9711-2023石油天然气工业管线输送系统用钢管
- 2023-2024学年福建省厦门市思明区松柏片区人教版一年级上册期中测试数学试卷(解析版)
- 余华读书分享+名著导读《我们生活在巨大的差距里》
- 阿里云数据备份方案
- 商显市场调研报告
- 公司网络安全培训课件
- 质量体系调查表-2
- 和田玉专业知识
评论
0/150
提交评论