- 浏览: 115371 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
eyeandroid_com:
貌似掉线 写道其实ImageView, ImageButton ...
【Android每日一讲】2012.11.12 设计具有背景图的按钮 - ImageButton的焦点及事件处理 -
貌似掉线:
其实ImageView, ImageButton, Butto ...
【Android每日一讲】2012.11.12 设计具有背景图的按钮 - ImageButton的焦点及事件处理 -
lhw0531:
有推广嫌疑
【史上最全的】Android应用源码免费下载 -
tenderuser:
L_sharp 写道no pic u c a xx没有图片,你 ...
自定义ViewGroup实现ViewPager的滑动效果(附源码下载) -
L_sharp:
no pic u c a xx
自定义ViewGroup实现ViewPager的滑动效果(附源码下载)
1.主要内容
本小节首先对Activity的各个生命周期作简单介绍,然后介绍如何设置Main Activity,最后讲解创建和销毁Activity。
2.视频讲解
http://www.eyeandroid.com/thread-11253-1-1.html
3.翻译参考
启动Activity
与其他在应用程序中由main()函数作为开端不同,Android系统的启动代码是在一个Activity的实例通过调用对应其生命周期的特定阶段的特定回调方法中进行。
其中有一系列的方法来启动Activity,也有一系列的方法来注销一个Activity。这次的教学内容,将会描述生命周期中最重要的函数方法,并向你展示如何在创建你的Activity实例时处理首要生命周期回调函数。
了解生命周期回调函数
在Activity的整个生命中,系统按顺序地调用一系列的像金字塔般的生命周期函数。也就是说,每个阶段的活动是金字塔中单独的一个步骤。当系统创建了一个新的Activity实例,每调用一个函数,就会往金字塔顶端走一步。而金字塔最顶端的状态(Resumed状态)就是Activity正在前台运行而且用户正与其交互的状态。当用户开始离开Activity,系统就会调用其他的方法,使Activity的状态往金字塔的低端走,并逐步去除Activity。
在某些条件下,Activity只会往低端走一小步并在该处等待(例如用户转去了其他应用程序),而在该处Activity也可以重新回到顶端(当用户返回到原Activity)并恢复到原来的状态。
图1。Activity生命周期的简化图,就像一个阶梯金字塔。这图像表明每个状态中是怎么样使用回调函数使得恢复状态回到顶端,或者降低状态到达底部。Activity可以从Paused状态和stopped状态恢复到Resumed状态。根据你的Activity的复杂程度,你可能不需要使用全部的生命周期函数。然而,去认识每一个周期函数并使用它们去保证满足用户的期望是非常重要的。
正确使用你的Activity生命周期函数去保障应用程序的良好表现,必须注意很多方面,包括下面的内容:
当用户接听电话或者转去另外一个应用程序时,不要让程序崩溃。
当用户没有激活使用它时,不消耗宝贵的系统资源。
当用户离开你的应用程序并在稍后的时间返回,不会丢失用户的进度。
当用户屏幕在横向与纵向旋转切换时,不会崩溃或者丢失用户进度。
Resumed状态
在这种状态下,该Activity在前台运行,用户可以与它进行交互。(有时也简称为“running”状态。)
Paused状态
在这种状态下,该Activity被部分遮蔽(被其他在前台的半透明或不覆盖整个屏幕的活动遮住)。此状态不接受用户输入,并且不能执行任何代码。
Stopped状态
在这种状态下,该活动是完全隐藏,不可见的,它被认为是在后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码。
其他的状态(created状态和started状态)都是非常短暂而且系统通过调用函数使得非常快地转到下一状态。
因此,当系统调用了onCreated()之后,非常快地就调用了onStart()方法使得进入下一状态,而又马上调用了onResumed又进入了下一状态。
上面是基本生命周期知识。下面,您开始学习一些具体的生命周期行为。
指定你的程序首次启动的Activity
当用户从主屏幕点击应用程序图标,系统会调用你声明的launcher或者main Activity 的onCreate()函数,这是Activity作为您的应用程序界面为主要切入点。你可以在Androidmanifest.xml文件中定义程序的主Activity,该文件在您的项目的根 目录下。
主Activity必须在manifest文件中使用<intent-filter>标签,并包含Main action和LAUNCHER 内容。 例如:
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注:当你创建一个新的Android项目,默认的项目会包含一个Activity类,并且此类会有如上的声明。如果mainAction内容或者launcher内容都没有在您的其中任何一个activity生命中,那么您的应用程序的图标就不会出现在android的主屏菜单列表上了。
创建一个新的实例
大多数的应用程序都会有若干个不同的Activity去让用户实现不同的操作。主Activity在当用户点击你的应用程序图标并对用户的操作作出反应,调用onCreate()方法创建一个Activity的实例。
你必须在onCreate()方法中操作一些在整个生命周期内只会调用一次的程序启动逻辑内容。例如,可以在onCreate()方法中定义用户界面的或者初始化一些类变量的内容。
例如,以下的代码向你展示在onCreate()方法中执行活动的一些基本设置,如声明用户界面(在XML布局文件中定义),定义成员变量,并配置UI。
TextView mTextView; // Member variable for text view in the layout
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the user interface layout for this Activity
// The layout file is defined in the project res/layout/main_activity.xml file
setContentView(R.layout.main_activity);
// Initialize member TextView so we can manipulate it later
mTextView = (TextView) findViewById(R.id.text_message);
// Make sure we're running on Honeycomb or higher to use ActionBar APIs
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// For the main activity, make sure the app icon in the action bar
// does not behave as a button
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
}
}
注意:在Android2.0(API 5 Level)或者更高版本中,使用SDK_INT阻止旧的操作系统执行新的API函数,老版本的版本将会遇到“运行时异常”的错误。一旦onCreate()方法执行完毕,系统会迅速地执行onStart()方法和onResume()方法。您的Activity永远不会停留在Created或者Started状态中。当onStart()方法被调用之后,Activity将会变成可见,但是onResume()方法会迅速被调用,并且Activity会维持在Resumed状态直到一些事情发生,例如接到电话,或者用户导航到另一个Activity中,或者屏幕被关闭了。
在后续的其他内容中,你会学习到其他的启动函数在从Paused或者Stoped状态中恢复您的Activity的妙用之处。 注:onCreate()方法包含一个参数:savedInstanceState,这将会在后面重建Activity的内容中讲到。
图2:这是描述Activity生命周期结构的另外一个例子,着重强调三个主要的回调函数在创建一个实例中的调用顺序:onCreate(),onStart(),onResume()。一旦这个调用顺序完成了,Activity将会到达用户可以交互的Resumed状态直到用户选择去了其他Activity。
销毁Activity
Activity的第一个生命周期函数是onCreated,最后一个生命周期函数是onDestroy()。系统将调用onDestroy()函数作为Activity从内存中完全销毁去除的最后一个信号。大多数的应用程序并不需要使用到这个函数,因为局部类的引用将会和Activity一起销毁,而一些清理工作,主要也是在onPaused()和onStop()中。然而,如果你的Activity包含了有在onCreated()或者其他持续性运行的资源在后台线程行运行,您就应该在onDestroy()方法中清除掉它们,而避免内存泄露。
@Override
public void onDestroy() {
super.onDestroy(); // Always call the superclass
// Stop method tracing that the activity started during onCreate()
android.os.Debug.stopMethodTracing();
}
一般来说,系统会在调用onPause()方法和onStop()之后才调用onDestory()方法,但是,有一种情况是例外的,那就是在你在onCreate()方法中调用finish()方法。在一些情况下,你的Activity作为一个临时决定的操作对象而去启动另外一个Activity时,你可能需要在onCreate()方法中调用finish()方法去销毁Activity,在这种情况中,系统会直接调用onDestroy()方法而不用再去调用其他的生命周期函数。
本小节首先对Activity的各个生命周期作简单介绍,然后介绍如何设置Main Activity,最后讲解创建和销毁Activity。
2.视频讲解
http://www.eyeandroid.com/thread-11253-1-1.html
3.翻译参考
启动Activity
与其他在应用程序中由main()函数作为开端不同,Android系统的启动代码是在一个Activity的实例通过调用对应其生命周期的特定阶段的特定回调方法中进行。
其中有一系列的方法来启动Activity,也有一系列的方法来注销一个Activity。这次的教学内容,将会描述生命周期中最重要的函数方法,并向你展示如何在创建你的Activity实例时处理首要生命周期回调函数。
了解生命周期回调函数
在Activity的整个生命中,系统按顺序地调用一系列的像金字塔般的生命周期函数。也就是说,每个阶段的活动是金字塔中单独的一个步骤。当系统创建了一个新的Activity实例,每调用一个函数,就会往金字塔顶端走一步。而金字塔最顶端的状态(Resumed状态)就是Activity正在前台运行而且用户正与其交互的状态。当用户开始离开Activity,系统就会调用其他的方法,使Activity的状态往金字塔的低端走,并逐步去除Activity。
在某些条件下,Activity只会往低端走一小步并在该处等待(例如用户转去了其他应用程序),而在该处Activity也可以重新回到顶端(当用户返回到原Activity)并恢复到原来的状态。
图1。Activity生命周期的简化图,就像一个阶梯金字塔。这图像表明每个状态中是怎么样使用回调函数使得恢复状态回到顶端,或者降低状态到达底部。Activity可以从Paused状态和stopped状态恢复到Resumed状态。根据你的Activity的复杂程度,你可能不需要使用全部的生命周期函数。然而,去认识每一个周期函数并使用它们去保证满足用户的期望是非常重要的。
正确使用你的Activity生命周期函数去保障应用程序的良好表现,必须注意很多方面,包括下面的内容:
当用户接听电话或者转去另外一个应用程序时,不要让程序崩溃。
当用户没有激活使用它时,不消耗宝贵的系统资源。
当用户离开你的应用程序并在稍后的时间返回,不会丢失用户的进度。
当用户屏幕在横向与纵向旋转切换时,不会崩溃或者丢失用户进度。
Resumed状态
在这种状态下,该Activity在前台运行,用户可以与它进行交互。(有时也简称为“running”状态。)
Paused状态
在这种状态下,该Activity被部分遮蔽(被其他在前台的半透明或不覆盖整个屏幕的活动遮住)。此状态不接受用户输入,并且不能执行任何代码。
Stopped状态
在这种状态下,该活动是完全隐藏,不可见的,它被认为是在后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码。
其他的状态(created状态和started状态)都是非常短暂而且系统通过调用函数使得非常快地转到下一状态。
因此,当系统调用了onCreated()之后,非常快地就调用了onStart()方法使得进入下一状态,而又马上调用了onResumed又进入了下一状态。
上面是基本生命周期知识。下面,您开始学习一些具体的生命周期行为。
指定你的程序首次启动的Activity
当用户从主屏幕点击应用程序图标,系统会调用你声明的launcher或者main Activity 的onCreate()函数,这是Activity作为您的应用程序界面为主要切入点。你可以在Androidmanifest.xml文件中定义程序的主Activity,该文件在您的项目的根 目录下。
主Activity必须在manifest文件中使用<intent-filter>标签,并包含Main action和LAUNCHER 内容。 例如:
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注:当你创建一个新的Android项目,默认的项目会包含一个Activity类,并且此类会有如上的声明。如果mainAction内容或者launcher内容都没有在您的其中任何一个activity生命中,那么您的应用程序的图标就不会出现在android的主屏菜单列表上了。
创建一个新的实例
大多数的应用程序都会有若干个不同的Activity去让用户实现不同的操作。主Activity在当用户点击你的应用程序图标并对用户的操作作出反应,调用onCreate()方法创建一个Activity的实例。
你必须在onCreate()方法中操作一些在整个生命周期内只会调用一次的程序启动逻辑内容。例如,可以在onCreate()方法中定义用户界面的或者初始化一些类变量的内容。
例如,以下的代码向你展示在onCreate()方法中执行活动的一些基本设置,如声明用户界面(在XML布局文件中定义),定义成员变量,并配置UI。
TextView mTextView; // Member variable for text view in the layout
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the user interface layout for this Activity
// The layout file is defined in the project res/layout/main_activity.xml file
setContentView(R.layout.main_activity);
// Initialize member TextView so we can manipulate it later
mTextView = (TextView) findViewById(R.id.text_message);
// Make sure we're running on Honeycomb or higher to use ActionBar APIs
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// For the main activity, make sure the app icon in the action bar
// does not behave as a button
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
}
}
注意:在Android2.0(API 5 Level)或者更高版本中,使用SDK_INT阻止旧的操作系统执行新的API函数,老版本的版本将会遇到“运行时异常”的错误。一旦onCreate()方法执行完毕,系统会迅速地执行onStart()方法和onResume()方法。您的Activity永远不会停留在Created或者Started状态中。当onStart()方法被调用之后,Activity将会变成可见,但是onResume()方法会迅速被调用,并且Activity会维持在Resumed状态直到一些事情发生,例如接到电话,或者用户导航到另一个Activity中,或者屏幕被关闭了。
在后续的其他内容中,你会学习到其他的启动函数在从Paused或者Stoped状态中恢复您的Activity的妙用之处。 注:onCreate()方法包含一个参数:savedInstanceState,这将会在后面重建Activity的内容中讲到。
图2:这是描述Activity生命周期结构的另外一个例子,着重强调三个主要的回调函数在创建一个实例中的调用顺序:onCreate(),onStart(),onResume()。一旦这个调用顺序完成了,Activity将会到达用户可以交互的Resumed状态直到用户选择去了其他Activity。
销毁Activity
Activity的第一个生命周期函数是onCreated,最后一个生命周期函数是onDestroy()。系统将调用onDestroy()函数作为Activity从内存中完全销毁去除的最后一个信号。大多数的应用程序并不需要使用到这个函数,因为局部类的引用将会和Activity一起销毁,而一些清理工作,主要也是在onPaused()和onStop()中。然而,如果你的Activity包含了有在onCreated()或者其他持续性运行的资源在后台线程行运行,您就应该在onDestroy()方法中清除掉它们,而避免内存泄露。
@Override
public void onDestroy() {
super.onDestroy(); // Always call the superclass
// Stop method tracing that the activity started during onCreate()
android.os.Debug.stopMethodTracing();
}
一般来说,系统会在调用onPause()方法和onStop()之后才调用onDestory()方法,但是,有一种情况是例外的,那就是在你在onCreate()方法中调用finish()方法。在一些情况下,你的Activity作为一个临时决定的操作对象而去启动另外一个Activity时,你可能需要在onCreate()方法中调用finish()方法去销毁Activity,在这种情况中,系统会直接调用onDestroy()方法而不用再去调用其他的生命周期函数。
发表评论
-
[Android Training视频系列] 8.3 Dealing with Audio Output Hardware
2013-07-19 21:29 757用户在播放音乐的时候 ... -
[Android Training视频系列] 8.2 Managing Audio Focus
2013-07-19 00:20 1167视频讲解:http://www.eyeandroid.com/ ... -
[Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback
2013-07-17 22:26 852主要内容: 1 鉴别使用 ... -
[Android教程]通过Intent分享数据内容给其他应用程序
2013-05-16 07:57 716一:主要内容 本文档首先介绍如何通过发送Intent来分享数据 ... -
[Android Training视频系列] 6.3 Saving Data in SQL Databases(保存数据到SQLite)
2013-05-06 07:54 809一 主要内容 1.概述 2.定义Schema与Contract ... -
[Android Training视频系列] 6.2 Saving Files(保存文件)
2013-02-19 00:11 748一:主要内容 1.概述 2.选择内部存储还是外部存储 3.获取 ... -
【Android您问我讲】Android 2.x中使用actionbar - Actionbarsherlock的使用
2013-01-06 11:34 17041. 范例说明 从Android 3.0开始,Android引 ... -
【Android您问我讲】带左右滑动的选项卡 - ViewPager与Tabhost的结合使用
2013-01-02 00:34 22891. 范例说明 ViewPager实现滑动切换的效果,但是切换 ... -
【Android您问我讲】如何使用选显卡 - Tabhost的使用
2012-12-23 00:40 10991. 范例说明 TabHost是Android系统中提供的一 ... -
[Android Training视频系列]6.1 Saving Key-Value Sets
2012-12-22 10:35 8121.主要内容 本小节介绍S ... -
[Android Training视频系列]2.4 Recreating an Activity
2012-12-18 00:34 9291.主要内容 本讲讲解onSaveInstanceState与 ... -
【Android您问我讲】超炫的左右滑动效果 - ViewPager的使用
2012-12-16 20:45 10501. 范例说明 •android-support-v4.jar ... -
[Android Training视频系列]2.3 Stopping and Restarting an Activity
2012-12-16 13:14 9631.主要内容 本小节介绍onStop与onRestart以及 ... -
[Android Training视频系列]2.2 Pausing and Resuming an Activity
2012-12-14 00:58 10671.主要内容 本讲介绍onPause和onResume,主要分 ... -
[Android Training视频系列]1.4 Starting Another Activity
2012-12-12 00:29 8821.主要内容 本小结在1.3 ... -
[Android Samples视频系列之ApiDemos] App-Activity-TranslucentBlur和Wallpaper
2012-12-09 23:56 7691.Demo说明与演示 TranslucentBulr :这个 ... -
[Android Samples视频系列之ApiDemos] App-Activity-Translucent
2012-12-05 00:12 8901.Demo说明与演示 该Demo显示一个半透明Activit ... -
[Android Samples视频系列之ApiDemos] App-Activity-SetWallpaper
2012-12-03 00:12 9831.Demo说明与演示 该Demo介绍如何在Android获取 ... -
【Android每日一讲】2012.11.29 自定义下拉菜单模式 - Spinner与setDropDownViewResource
2012-12-01 13:19 11651. 范例说明 Spinner就是下拉菜单,由于手机画面有限, ... -
【Android每日一讲】2012.11.28 快速地搜索手机文件引擎 - Java IO的应用
2012-11-28 00:25 10451. 范例说明 大家都应该用过操作系统的文件搜索功能吧!它可以 ...
相关推荐
在Android开发领域,Android Training是一系列官方提供的教程和实践课程,旨在帮助开发者提升技能,创建高质量的Android应用程序。这些教程涵盖了从基础到高级的各种主题,包括用户界面设计、性能优化、网络通信、...
Android training docs
6. Android 应用开发的初始步骤:文档列举了学习Android应用开发的几个关键步骤,例如“Getting Started”(开始)、“Building Your First App”(构建您的第一个应用)、“Creating an Android Project”(创建...
Android Studio Essential Training视频教程,Part1/3。
Android Training是Google提供的一系列教程,旨在帮助开发者提升Android开发技能。这篇文章是Android Training的一部分,专门讲解了如何结合Navigation和ListView实现高效的用户导航。 4. **源码分析** 文章提供...
Android Studio Essential Training视频教程,Part3/3。
在Android开发领域,Android Training是谷歌提供的一系列官方教程,旨在帮助开发者提升技能,了解最佳实践,并掌握构建高质量Android应用的技巧。这个压缩包文件包含了Android Training官方课程中的示例源代码,对于...
这篇文章是基于“Android Training”系列的学习笔记,主要探讨了App Bar的设计原理和参考源码分析。下面将详细阐述App Bar的相关知识点。 首先,App Bar是Android设计指南中推荐的用户界面元素,它位于屏幕顶部,...
Android Studio Essential Training视频教程,Part2/3。
《Android官方Training实例详解》 Android官方Training实例是Android开发者学习和进阶的重要资源,它由谷歌官方提供,旨在帮助开发者深入理解Android平台的各种功能和最佳实践。这些实例覆盖了从基础到高级的各种...
### Android培训课程中文版知识点概览 #### 一、Android入门基础 1. **序言** - 介绍Android开发的基础知识,包括Android的历史、特点和发展趋势。 2. **建立第一个App** - 学习如何创建一个新的Android项目。 ...
Android平台具有良好的应用间交互机制,文档将介绍如何使你的应用能够发送数据到其他应用、接收其他应用的数据以及如何允许其他应用启动你的应用中的Activity。 ### 2. 内容分享功能的实现 #### 2.1 简单数据的...
Android Training系列是Google提供的一系列教程,旨在帮助开发者提升技能,而"Android Training学习笔记——Navigation 参考源码"则是对这一主题的深入探讨。 首先,Navigation组件的核心概念是Navigation Graph,...
Android Development Training Course Repository Android アプリ開発の基礎知識と実務スキルを身に付けるトレーニングコース 前提 このトレーニングコースに入る前に、下記の知識・スキルについて勉強しておいてく...
在本项目"AndroidTraining_Android项目_tongue5nn_android_"中,我们主要探讨的是一个Android应用程序的开发,它集成了新闻聚合功能,包括日历新闻和视频内容。这个项目由用户tongue5nn创建,是Android开发的学习...
这篇“Android Training学习笔记”主要围绕这两个组件展开,旨在帮助开发者提升他们的Android应用设计能力。 RecyclerView是Android SDK提供的一种列表视图控件,取代了早期的ListView。RecyclerView的优势在于它的...
Android开发平台技术资料,Android开发平台技术资料