【移动开发】Android中Activity剖析

简介:

    又到了暑假,大四的走了,我们理所当然成为了学校的老大,哈哈!今年不打算回家了,在学校和校友一起参加比赛做项目。好久就有写博客的冲动,但老是被各种事情所打扰,今天终于考完试了,于是在安静的宿舍开始提笔写起我的第一篇博客。写博客的目的主要是:总结以下这一年多来接触Android开发中所学到的知识,以此来督促自己不断地前进学习(废话比较多。。。此段可以忽略)

  1. Activity 栈

       Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。

       当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:

  2. Activity的生命周期

   首先看看android developers 网上的activity的生命周期图:




   其实,当初我第一次开始看到此图的时候,也是一头雾水,于是就写了一个Demo简单测试一下,结果就清楚明了了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package  com.tutor.activitydemo;
import  android.app.Activity;
import  android.os.Bundle;
import  android.util.Log;
public  class  ActivityDemo  extends  Activity {
     private  static  final  String  TAG =  "ActivityDemo" ;
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Log.e(TAG,  "---》onCreate()" );
     }
     @Override
     protected  void  onStart() {
         super .onStart();
         Log.e(TAG,  "---》onStart()" );
     }
     @Override
     protected  void  onRestart() {
         super .onRestart();
         Log.e(TAG,  "---》onRestart()" );
     }
     @Override
     protected  void  onResume() {
         super .onResume();
         Log.e(TAG,  "---》onResume()" );
     }
     @Override
     protected  void  onPause() {
         super .onPause();
         Log.e(TAG,  "---》onPause()" );
     }
     @Override
     protected  void  onStop() {
         super .onStop();
         Log.e(TAG,  "---》onStop()" );
     }
     @Override
     protected  void  onDestroy() {
         super .onDestroy();
         Log.e(TAG,  "---》onDestroy()" );
     }
}


方法说明:

   1.protected void onCreate(Bundle savedInstanceState)一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据(加载用户数据库保存数据,配置信息)、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。

   2.protected void onStart()该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。

   3.protected void onResume() 在 Activity 从 Pause 状态转换到 Active 状态时被调用。

    4.protected void onResume()在 Activity 从 Active 状态转换到 Pause 状态时被调用。

    5.protected void onStop()在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。

    6.protected void onDestroy()在 Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源清理内存等工作。


打印结果分析:

 第一组

     1.打开应用后执行顺序:onCreate()->onStart()->onResume()

     2.按Back键后结束这个应用:onPause()->onStop()->onDestory()

 第二组

    3.按Home键后:onPause()->onStop()这两个方法,这时候应用程序并没有销毁;紧接着再次进入此程序会执行:onRestart()->onStart()->onResume()

   为了更好的理解Activity的生命周期,从网上找到此图:

   从上图可以看到,最右边下方的Android机器人代表启动一个Activity,经过一系列的操作和过程,经过三个生命周期回调方法,到达金字塔的顶层,爬到顶层就可以供用户操作了。然后从金字塔顶往下,再经过三个生命周期方法,就又到了金字塔的另一边底层,Activity就销毁了。但是当下金字塔的时候,只要没到最下面,都有通道可以回到最顶层。

   1.Activity在onStart方法调用后,就处于可见状态了(visible)


   2.当经过onPause方法后处于暂停状态(Paused),这时Activity处于半透明状态,为不可操作的,比如弹出一个模态框。这时Activity不会执行任何代码

   3.Activity在调用onStop方法后即处于用户不可见的状态了(invisible)


   4.onCreate方法在整个生命周期只会被调用一次


   5.自定义Activity继承Activity类后有没有需要必须实现的方法?答案是没有,但是要想启动和显示一个Activity,就必须实现onCreate方法并指定布局文件


   6.大部分的清理操作应该在onPause和onStop中执行,如果在onCreate中开启了耗时线程或耗资源的线程操纵,应该在onDestroy中杀死线程

  注意:

   系统一般都是在执行完onPause和onStop方法后再执行onDestroy方法,但是当在onCreate方法中调用了Activity的finish()方法后,比如在onCreate方法里启动新的Activity并调用了finish方法,这时系统会直接调用onDestroy方法!

就这些吧,东西比较简单,主要是为了练练博客怎么写,嘿嘿!





     本文转自zhf651555765 51CTO博客,原文链接:http://blog.51cto.com/smallwoniu/1246732,如需转载请自行联系原作者





相关文章
|
11月前
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
9月前
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
231 17
|
11月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
202 6
|
11月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
132 3
|
11月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
133 3
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
355 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
12月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
204 4
|
12月前
|
设计模式 前端开发 JavaScript
探索移动应用开发:从Android到iOS的跨平台之旅
【9月更文挑战第21天】在这篇文章中,我们将一同揭开移动应用开发的神秘面纱,从Android和iOS这两个主流平台出发,探讨如何利用现代技术栈实现跨平台开发。文章将通过具体的代码示例,带领读者理解不同平台间的差异与联系,以及如何运用React Native框架简化开发流程,实现一次编写,多平台运行的目标。无论你是刚入门的新手还是希望拓展技能的老手,这篇文章都将为你提供宝贵的知识和启示。
169 3
|
12月前
|
存储 Java 开发工具
移动应用开发之旅:探索Android操作系统的无限可能
【8月更文挑战第56天】随着智能手机的普及,移动应用已成为我们日常生活中不可或缺的一部分。本文将引导读者了解移动应用开发的基本概念,重点探讨Android操作系统的开发环境搭建、界面设计、功能实现以及与后端服务的交互。通过简单的代码示例和清晰的步骤说明,即便是初学者也能快速入门,开启自己的移动应用开发之旅。
|
11月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
109 0