浅谈Android的Activity运行流程(生命周期)

关于Android的Activity运行流程,我们可以写一些程序来直观的查看Activity的运行流程。在这里我们使用Log工具来获取Activity运行日志。假如我们新建一个Android项目,ProcessActivity.java代码如下:

public class ProcessActivity extends Activity {

private static final String tag="徐守威";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.main);

Log.v(tag, "onCreate...");

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

super.onRestart();

Log.v(tag, "onRestart...");

}

@Override

protected void onStart() {

// TODO Auto-generated method stub

super.onStart();

Log.v(tag, "onStart...");

}

@Override

protected void onResume() {

// TODO Auto-generated method stub

super.onResume();

Log.v(tag, "onResume...");

}

@Override

protected void onPause() {

// TODO Auto-generated method stub

super.onPause();

Log.v(tag, "onPause...");

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

super.onStop();

Log.v(tag, "onStop...");

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

Log.v(tag, "onDestroy...");

}

}

我们为Activity的哥哥状态添加了“Log”记录消息。当模拟器运行时,我们可以通过“LogCat”工具来查看Activity所处在的状态。以上代码中的七个状态又可以归纳成三类:

1.资源分配(Create/Destory

完整的Activity生命周期由“Create”状态开始,由“Destory”状态结束。创建(Create)时分配资源,销毁(Destroy)时释放资源。

2.可见与不可见(Start/ReStart/Stop

当Activity运行到“Start”状态时,就可以在屏幕上看到这个Activity。相反地,当Activity运行到“Stop”状态时,这个Activity就会从屏幕上消失。

当Activity尚未被销毁(Destory),而又再次被调用时,即会先进入“Restart”状态后,再进入正常的“Start”状态。例如我们从当前的Activity返回前一个Activity时候,将会比直接打开新Activity多进入一个“Rstart”状态。

3.用户能否直接访问屏幕(Resume/Pause

当有个“Toast”、“AlertDialog”、短信、电话等消息闯入时候,原来的Activity会进入“Pause”状态,暂时放弃直接访问屏幕的能力,被中断到背景去,将前景交给优先级高的事件。当这些优先级高的时间处理完后,Activity就改进入“Resume”状态,此时又直接访问屏幕。

以上流程我们可以通过一个示意图来加深理解:

由时机运行的记录来看,我们可以归纳出所有Android应用程序都遵循的动作流程。

(1)一般启动

Flow:onCreate -> onStart -> onResume

启动一个Activity的基本流程是:分配资源给这个Activity(Create状态),然后将Activity内容显示到屏幕上(Start状态)。在一切就绪后,取得屏幕的控制权(Resume状态),用户可以开始使用这个程序。

(2)调用另一个Activity

Flow:onPause(1) -> onCreate(2) -> onStart(2) -> onResume(2) -> onStop(1)

这是个县冻结原本的Activity,再交出直接访问屏幕能力(Pause状态)的权利。知道Activity2完成一半启动流程后,Activity1才会被停止。

(3)返回原Activity

Flow:onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestory(2)

在新的Activity中,点选硬件的“Back”按钮,可以让我们回到原本的Activity。

(4)退出结束

Flow: onPause -> onStop -> onDestory

如果程序中有直接调用“finishi”函数来关闭Activity的话,系统假设我们很确定我们在做什么,因此会直接跳过先冻结(Freeze)的阶段,暂停(Pause),停止(Stop),然后销毁(Destory)。

(5)回收后再启动

Flow: onCreate -> onStart -> onResume

被回收掉的Activity一旦重新被调用时,会像一般启动一样再次调用Activity的onCreate函数。

当我们使用Android手机一阵子,在手机上已经执行过多个应用程序。只要按下“Back”(返回)键,Android就会打开最近一次打开过的Activity。

这时候我们要是按下多次“Back”(返回)键,理论上迟早会返回到某个已经销毁(Destory)的Activity,这时候会发生什么事情呢??

如果应该打开的Activity已经被回收了,那么这个Activity会再次被创建(Create)出来。再次被创建出来的Activity,当然会跟原本我们打开过的Activity不一样。

所以如果要让再次被创建出来的Activity看起来跟原本打开过的一样,那么在Activity之间切换时候,我们就要留意保留数据:最好在每次Activity运行到“onPalse”或“onStop”状态时先保存数据,然后在“onCreate”时候将数据读出来即可!

时间: 2024-10-07 01:12:42

浅谈Android的Activity运行流程(生命周期)的相关文章

Android之Activity,Fragment生命周期探知

Android之Activity,Fragment生命周期探知 - [email protected] - 博客频道 - CSDN.NET 根据官方文档,本人手画了一下Activity和Fragment的整个生命周期执行顺序图: Activity生命周期执行顺序图: Fragment生命周期执行顺序图: ? 一个Activity在它的整个生命周期里面分三个状态,分别是活动周期,可见周期,以及生命周期. 一个Fragment是依附于Activity之上,它的整个生命周期里面也分三个状态,分别是活动

浅谈Android之Activity生命周期

 Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Activity的生命周期,以便我们在以后的开发中能如鱼得水. 一.初识Activity   在日常应用中Activity是与用户交互的接口,它提供了一个用户完成相关操作的窗口.当我们在开发中创建Activity后,通过调用setContentView(View)方法来给该Activity指定一个布局界

浅谈android的activity

说道activity,大家可以说是熟悉的不能再熟悉,首先,先来个镇楼图, 个人觉得谷歌的这张图,比别的什么生命周期图都好;说下各个生命周期注意的: 1:onstart()时,activity可见; 2:oncreate()在生命周期中只执行一次; 3:onpause()时,activity处于半透明的状态,不可操作; 4:onstop()时,activity处于不可见; 5:大多数的清理操作最好在onpause()和onstop中操作,如果在oncreate()中执行了线程操作,最好在onDes

Android活动(Activity)状态与生命周期总结

前言 掌握好Activ的生命周期对任何安卓开发者来说都很重要,当你深入理解时,就可以编写出更加流畅连贯的程序/应用.你的程序将会拥有更好的用户体验. (一)活动状态:每个Activity在其生命周期中最多可能会有四种状态 a:运行状态, 当一个Activity位于回退栈栈顶时,这是Activity就处于运行状态.系统是不会回收处于运行状态的活动的,这样会带来非常差的用户体验. b:暂停状态,当一个活动不在处于栈顶位置,但仍然可见,这时就进入了暂停状态.什么叫做不在栈顶却又可见呢,比如弹出框式的A

浅谈Android Activity

Activity是Android中最重要,最常见,也是最基本的组件,下面来详细介绍下Activity. 介绍 一个Acitvity作为一个显示在屏幕上的用户交互界面,比如在电子邮件应用中比如:一个用来显示收件列表的Activity,一个用来写邮件的Activity,一个阅读邮件内容的Activity,等等.Activity用来提供用户体验,许多不同体验的Activity聚集在一起即可以形成一个Android应用程序的用户体验,每一Activity都是相互独立的.应用除了可以访问自己的Activi

浅谈Android多屏幕的事

浅谈Android多屏幕的事 一部手机可以同时看片.聊天,还可以腾出一支手来撸!这么吊的功能(非N版本,非第三方也能实现,你不知道吧)摆在你面前,你不享用?不关注它是怎样实现的?你来,我就满足你的欲望! 一部手机可以同时看片.聊天,还可以腾出一支手来撸==!就像这样: 是时候告别来回切换应用屏幕的酸爽了,还可以在分屏模式下两Activity间直接拖放数据! 好高大上的样子!这是怎么实现的?别急,我们一一道来: kitkat(4.4)版本对多任务分屏的实现 由于相关的代码和功能被封装及隐藏起来,所

Android Small插件化框架解读——Activity注册和生命周期[阿里工程师分享]

通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特别是大部分知识都需要结合虚拟机和Androidframwork的原理才能慢慢理解.比如,文中作者提到了插件化框架要解决的三个核心问题: 1)插件类的加载: 2)插件资源的处理: 3)Activity注册和生命周期问题: 其中第3点作者是这样解释的,"大部分插件化框架解决办法都是采用在宿主工程里预先注

[Android][Framework]Activity启动流程

开始 从Launcher点击一个App图标,会触发如下动作: LauncherActivity.java protected void (ListView l, View v, int position, long id) { Intent intent = intentForPosition(position); startActivity(intent);} 走到了 Activity.java 的startActivity相关方法: public void startActivity(Int

浅谈 Android Service

 浅谈Android Service的基本用法: 关于Service最基本的用法自然是启动和停止操作. 启动Service有两种方式: 1.通过startService(Intent intent)方式启动,启动时会自动执行onCreate(),onStartCommand()方法. 2.通过bindService(Intent intent,ServiceConnection connection,int flag) 第一个参数是一个Intent对象,第二个参数是连接Service的实例,