`
Poechant
  • 浏览: 227615 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24243
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22051
社区版块
存档分类
最新评论

Android开发之道(6)Activity的状态转移

 
阅读更多

转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant


1、应用的生命周期


一个 Android 应用中的基本模块,是 Activity。此前我们尝试了如何实现在两个 Activity 之间切换。在切换的时候,Activity 的状态的迁移逻辑由开发者在设计程序时控制。可以说是在控制 Activity 的生命周期,从而控制了 Android 应用的生命周期。


与上一篇博文一样,我们创建两个 Activity 分别命名为 Test1 和 Test2,并通过 Intent 来切换。但是我们要 Override 一些方法,在其中加入 Log,以方便我们观察 Activity 的状态转换:


public class Test1extends Activity {



private staticfinal String TAG ="Activity-1";

public void onStart() {

super.onStart();

Log.v(TAG, "onStart");

}

public void onResume() {

super.onResume();

Log.v(TAG, "onResume");

}

public void onPause() {

super.onPause();

Log.v(TAG, "onPause");

}

public void onStop() {

super.onStop();

Log.v(TAG, "onStop");

}

public void onDestroy() {

super.onDestroy();

Log.v(TAG, "onDestory");

}

public void onRestart() {

super.onRestart();

Log.v(TAG, "onRestart");

}

}


其中用到了 Log.v(String tag, String msg),第一个参数 tag 可以方便区分是 Test1 还是 Test2 中的日志。v 表示 verbose,还有 d 表示 debug、i 表示 info、w 表示 warn、e 表示 error。


Test1 和 Test2 之间的切换中也要加入相应的 Log,并且再添加一个结束按钮,用于观察 Activity 被 kill 的过程。


public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button button1 = (Button) findViewById(R.id.button1);

button1.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View paramView) {

Intent intent = new Intent();

intent.setClass(Test.this, Test2.class);

startActivity(intent);

Test.this.finish();

}

});

Button button3 = (Button) findViewById(R.id.button3);

button3.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View paramView) {

Test.this.finish();

}

});

}


上面是 Test1 的 onCreate,Test2的类似。其他资源文件和布局文件在此略去。


使用 DDMS 来观察,为了避免“重做车轮”的低效,关于 DDMS 的使用可以参见这位博主的博文《Eclipse调试Android工具集锦之二-DDMS》。我们通过 DDMS 观察到:



启动时载入 Activity1:



Activity1 到 Activity2:



Activity2 结束时:



可以知道 Test1 的状态转换是从 onCreate 的创建开始,到 onStart、onResume 就进入了运行状态。这时如果被切换到 Test2,Test1 就会被 onPause,而 Test2 要经过 onCreate、onStart 和 onResume 的过程。接着,就显示 Test2 不显示 Test1了。但还没完,Test1 还要 onStop 和 onDestory。


当我们的 Activity 很多时,它们的状态控制就很重要了。至于复杂到需要状态机来表述状态转移图那么多而复杂的 Activity 关系的情况,恐怕一般简单的应用型 Android App 还用不到,而且我也 hold 不住的 :P


转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant

-

分享到:
评论

相关推荐

    Android应用源码之模拟Activity进出栈.zip

    总之,"Android应用源码之模拟Activity进出栈"是一个关于Android开发的重要主题,它涵盖了Activity生命周期、回退栈原理、Intent的使用以及配置Activity属性等内容。通过学习和实践这些知识,开发者可以更好地控制...

    Android_Activity_生命周期例子

    总之,理解Activity的生命周期是Android开发的基础,而`ActionBarCompat`则提供了在老版本Android设备上实现现代界面设计的途径。通过实践这些例子,开发者能够更好地优化他们的应用,提供一致且流畅的用户体验。

    Android呼叫转移代码

    在Android系统中,呼叫转移是一种常见的功能,允许用户将电话呼叫导向到其他设备或号码上。这在多种情况下非常有用,比如用户不便接听电话时,可以将来电转至语音信箱或者另一部手机。本篇文章将深入探讨如何在...

    activity-lifecycle.zip

    在Android应用开发中,Activity是用户界面的基本单元,它代表了用户与应用交互的主要场景。`activity-lifecycle.zip`文件中的内容很可能是通过一系列的示例来详细展示Android Activity的生命周期,包括各个状态以及...

    Activity 管理器

    当焦点转移或系统资源紧张时,Activity可能会被暂停(onPause())或停止(onStop()),在系统需要时,可以通过onRestart()、onStart()和onResume()恢复到可见状态。 Activity之间的切换是通过Intent对象实现的,...

    华容道的算法实现(java/android)源码.zip

    《华容道算法实现——Java与Android视角》...通过阅读源码,我们可以深入了解算法在实际问题中的应用,以及Android开发的细节。不过,为了更好地理解项目,建议首先阅读作者分享的博客,了解算法的具体思路和实现细节。

    基于Android开发的音乐播发器源码.zip

    下面将详细解析基于Android开发的音乐播放器源码的相关知识点。 1. **Android SDK**:音乐播放器的开发基础是Android SDK,它提供了开发Android应用程序所需的API库、工具和构建系统。开发者需要对Android的各个...

    Activity的生命周期函数

    理解并熟练掌握这些生命周期函数是Android开发的基础,能够帮助开发者编写出更高效、更稳定的App。通过合理利用这些回调,我们可以有效地管理资源,优化用户体验,避免程序异常,从而提升应用的整体质量。在实际项目...

    Activity生命周期Demo

    "Activity生命周期Demo"中的源码应该包含了上述各个状态的回调方法,以及在这些方法中执行的相关操作,以直观地展示Activity状态变化的过程。通过对这个Demo的分析和实践,开发者可以更好地理解Activity的生命周期,...

    Android_XML属性大全

    在Android开发中,XML文件用于定义应用界面布局和其他配置信息。为了更好地控制应用的行为和外观,开发者可以利用一系列强大的XML属性来定制自己的应用。本文将详细介绍Android XML中常用的属性及其功能。 #### 二...

    基于Android平台通讯录管理系统的研究与开发.pdf

    Android系统基于Linux内核,结合Java系统数据构建,具备开源特性,允许第三方开发者复制和转移数据,便于不同应用程序组件的开发。其架构还包括可嵌入和提取数据的功能,确保高效运行。此外,Android还集成了多媒体...

    android allowTaskReparenting demo

    - 使用`allowTaskReparenting`时需谨慎,因为它可能影响应用的任务和Activity生命周期管理,可能导致意外的Activity状态丢失或恢复问题。 - 正确处理Intent和任务关联,避免因任务重新分配导致的逻辑错误。 - 测试是...

    Music_Player_Service.rar_ANDROID 播放_Service android_android serv

    在Android开发中,服务(Service)是一个至关重要的组件,它允许应用程序在后台执行长时间运行的操作,而无需与用户界面交互。本项目“Music Player Service”是针对Android平台设计的一个音乐播放器,它深入展示了...

    第一行代码Android学习练习代码2

    4. **暂停(Paused)**:当另一个Activity部分覆盖当前Activity,或者系统需要暂时将焦点转移到后台(如来电、通知等),Activity会进入暂停状态。`onPause()`方法会被调用,此时应保存一些关键数据,因为用户可能...

    Android 开发技巧

    0、ANDROID常用类库说明 6 1、ANDROID文件系统与应用程序架构 7 1.1、ANDROID 文件系统 7 1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 ...

    基于Android的音乐播放器

    总的来说,"基于Android的音乐播放器"项目涵盖了Android开发的多个方面,包括基础组件、UI设计、多媒体处理、事件监听、数据存储以及用户交互。通过这个项目,开发者不仅能学习到Android开发的基础知识,还能提升...

    android RecyclerView列表自动播放实现

    在Android开发中,RecyclerView是一种非常常用的组件,用于展示可滚动的列表数据。它不仅高效,而且灵活,可以适应各种复杂的布局需求。在这个场景下,我们要实现一个特殊的功能:在RecyclerView列表中的每个条目都...

    android技术进阶03.pdf

    这样,每个界面布局的变化就可以映射为状态机中的状态转移。 **1.3 状态机直接与Android互动** - **目的**:使用状态机的主要目的有两个: - **作为系统分析与设计工具**:以发掘用户需求为主导,首先规划状态机...

    android焦点滑动

    在Android开发中,"android焦点滑动"通常指的是在用户操作界面时,控件之间的焦点转移和滑动浏览效果。这种效果是通过Android系统提供的触摸事件处理和布局管理来实现的,尤其在列表视图(ListView)、滚动视图...

Global site tag (gtag.js) - Google Analytics