实验2-Activity组件的生命周期
《Android应用程序设计》实验报告 (2)

实验1 搭建开发环境与第1个Android程序【实验目的】1.熟悉Android开发环境的搭建2.掌握用Eclipse开发Android程序的流程【实验内容】一、搭建Android开发环境按照下面的步骤,完成Android环境的搭建。
1.1 JDK的安装及配置1.根据电脑的系统位数安装软件包里的JDK,安装目录设置为d:\jdk1.x。
(d为你的安装盘,可以设为任意盘;x为你安装的jdk版本)2. WIN7系统环境变量设置(1)环境变量设置一(2)环境变量设置二(3)环境变量设置三(4)环境变量设置四1)创建新的环境变量。
名:JA V A_HOME,值:x:\jdk1.72)修改系统变量Path,在path变量值前添加这段:%JA V A_HOME%\bin;3)修改系统变量classpath,值为:.;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\lib\tools.jar;(5)环境变量设置五1)测试开发环境。
在开始->搜索程序和文件里输入cmd.exe,打开cmd。
输入cd c:\ 命令进入c盘根目录。
2)在c盘根目录下使用记事本编写源文件,并存为java文件。
public class MyApp {public static void main (String[] args) {System.out.println(“我能学好Java语言!”);} }3)使用javac命令编译程序,在cmd命令行输入:javac MyApp.java生成class类型文件。
4)使用java命令运行程序,在cmd命令行输入:java MyApp如果在命令行显示结果“我能学好Java语言!”,则JDK环境配置成功。
1.2 Android SDK的安装及配置1. 解压adt-bundle-windows-x86_64-20131030.zip文件,里面的SDK是免安装版。
【Android开发 课件11】Android Activity组件相关培训二

4
最重要的 AppWidgetProvider 回调是 onUpdate(),因为应用添加每个应用微件时都会调用它。如果应用微件接受任何用户交互事件,则需要在此回调中注册事件处理脚本。如果应用微件未创建临时文件或数据库,或者未执行其他需要清理的工作,则 onUpdate() 可能是您需要定义的唯一一个回调方法。例如,如果您希望应用微件具有一个在用户点击时会启动 Activity 的按钮,则可以使用以下 AppWidgetProvider 实现:public class ExampleAppWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; Intent intent = new Intent(context, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); RemoteViews views = new RemoteViews(context.getPackageName(), yout.appwidget_provider_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); appWidgetManager.updateAppWidget(appWidgetId, views); } } } 此 AppWidgetProvider 仅定义了 onUpdate() 方法,目的是为了定义用于启动 Activity 的 PendingIntent,并使用 setOnClickPendingIntent(int, PendingIntent) 将其附加到应用微件的按钮。它包含一个遍历 appWidgetIds(这是一个 ID 数组,标识由此提供程序创建的每个应用微件)中每个条目的循环。这样一来,如果用户创建了应用微件的多个实例,则它们会全部同时更新。
Activity的生命周期

Activity的生命周期好好理解Activity的生命周期是非常重要的。
可以确保你的应用程序给用户提供一个完美的用户体验并适当的管理资源。
和前面介绍Application一样,Application不能自己控制自己的进程生命周期,Android系统运行时会管理每一个应用程序的进程,包括在应用程序里面的所有Activity。
当运行时需要终止并管理一个Activity的进程,这个Activity的状态会决定它所在的父应用程序的优先级。
接着,应用程序的优先级也会影响运行时,可能会终止该应用程序。
Activity 栈每一个Activity的状态会决定它在Activity栈中的位置,按照先进后出的方式组织现在所运行的所有的Activity,当一个新Activity启动时,当前位于前台的屏幕的将会移动到栈顶,如果用户点击了退后按钮,或者这个前台的Activity关闭了,栈中的下一个Activity会移动上来,并且处于活动状态,下图说明了这个过程:根据前面的说明,应用程序的优先级取决于它包含的最高优先级的Activity,当Android的内存管理决定终止哪一个Application以释放资源,也是使用这个栈决定建立在这些Activity上面的应用程序的优先级。
Activity 状态一个Activity从建立到销毁也就是移入到移出栈,这个过程通常可能包含以下四个状态:1、Active 获得状态,当一个Activity位于栈顶并显示在前台,等待获得用户输入命令,Android系统会尝试付出所有可能的资源保证它的运行,必要时会杀死一些在栈中位于比较靠后的一些Activity,以确保它需要的资源,当另外一个Activity变成Active状态,那么这个将会进入暂停状态。
2、Paused 暂停状态,有些情况下,你的应用程序会可见,但是不是获得用户输入的焦点,这种情况就是进入了暂停状态,出现这种状态也是是有一个半透明的或者不是全屏的Activity在它前面处于获得状态,当进入暂停状态,它会和处于获得状态一样对待,只是它不能获得用户的输入而已。
activity生命周期有几种状态

activity生命周期有几种状态
Activity生命周期有五种状态,分别是:
1.启动状态:当Activity启动后,会进入此状态,但此状态很短暂,会很快进入运行状态。
2.运行状态:Activity处于屏幕的最前端,它是可见的、有焦点的,并可以与用户进行交互,如单击、长按等事件。
此时,Activity 处于活动或运行状态。
3.暂停状态:在某些情况下,如Activity上覆盖了一个透明或非全屏的Activity,被覆盖的Activity仍然对用户可见,但无法获取焦点,此时它处于暂停状态。
暂停的Activity仍然是存活状态,保留着所有的状态和成员信息,并保持和窗口管理器的连接,但当系统内存不足时,它可能会被系统杀死。
4.停止状态:当Activity完全不可见时,如被另一个Activity 遮挡,它就处于停止状态。
此时,Activity仍然保留着当前的状态和成员信息,但由于对用户不可见,如果系统内存不足,这个Activity 很容易被系统杀死。
5.销毁状态:当Activity处于销毁状态时,意味着它将被清理出内存。
请注意,Activity生命周期指的是一个Activity从创建到销毁的全过程,包括上述的五种状态。
在Android开发中,理解和掌握Activity的生命周期对于内存管理和用户体验都至关重要。
Android实验报告—Android框架及Activity 生命周期程序设计

Android框架及Activity 生命周期程序设计实验目的:本实验的目的是使学生深入了解Android程序框架结构、了解Android组件的生命周期中各状态的变化关系、掌握Android应用程序的调试方法和工具。
通过程序设计, 掌握Activity的三种生命周期:全生命周期、可视生命周期和活动生命周期;每种生命周期中包含的不同的事件回调函数, 以及它们的作用和调用顺序, 深入理解Activity的生命周期过程。
实验要求:根据下图, 设计程序解释不同的事件回调函数在Activity的三种生命周期的作用如何。
[实现提示]1.建立Android工程, 其中工程名称: ActivityLifeCycle你的学号包名称:.bistu.你的班级号.ActivityLifeCycle你的学号Activity名称: ActivityLifeCycle你的学号如: 电技1001班学号后三位为123的学生, 应将包名称设为:.bistu.dj1001.ActivityLifeCycle1232、工程建立完毕后, 可以不进行界面设计, 即不必修改main.xml文件, 直接编写Java文件3.通过在生命周期函数中添加“日志点”的方法进行调试4、为了显示结果易于观察和分析, 在LogCat设置过滤器LifeCycleFilter测试过程在程序运行过程, 通过点击模拟器上的“返回键”, 生命周期中事件回调函数的执行顺序及作用是函数的调用顺序: onSaveInstanceState ()→onPause()→onStop() →onRestart()→onStart()→onResume();调用onSaveInstanceState()函数保存Activity状态;调用onPause()和onStop(), 停止对不可见Activity的更新;调用onRestart()恢复需要界面上需要更新的信息;调用onStart()和onResume()重新显示Activity, 并接受用户交互。
第3章 Activity

横竖屏切换
变回第一个图片
第一个按钮 弹出新窗口 横竖屏切换不重建
第二个按钮 弹出第二新窗口 横竖屏切换重建 但保存了状态
AndroidManifest.xml
<application >
<activity android:name=".MainActivity2"
横
屏
竖 屏
布 局
布
局
public void onCreate(Bundle save){
if(this.getResources().
getConfiguration().orientation ==
Configuration.ORIENTATION_PORTRAIT)
获取当前
{ //加载不同的布局 setContentView(yout.protrait);
✓ 这些组件的运行需要各自的上下文环境,也就是 Context。Context是维持Android程序中各组件能够 正常工作的一个核心功能类。
2 Activity生命周期
生命周期是一个对象从创建到销毁的过程,每一个对 象都有自己的生命周期
Activity的生命周期中分为四种状态 运行状态(Actived):当Activity在屏幕的最前 端时,它是可见的、有焦点的。 暂停状态(Paused): Activity对用户来说仍然 是可见的,但它不再拥有焦点。 停止状态(Stopped):当Activity完全不可见时, 它就处于停止状态,但仍然保留着当前状态和成 员信息。这些对用户来说都是不可见的。 销亡状态(Killed): Activity被系统杀死。
activity用法
activity用法Activity是Android开发中常用的组件,是用户界面或页面交互的基本元素,具有完整的处理及生命周期模型。
下面介绍下Activity的用法:1. 创建Activity:Android提供基本的Activity模版,需要使用其子类定义界面。
在onCreate()方法中,可以定义样式及初始化界面所需的资源。
2. Activity的生命周期:Activity的生命周期包括创建、启动(活动、可视、暂停、停止)、销毁几个阶段,在Activity切换时,会一次性进行持续处理各阶段动作。
3. Activity消息管理:Android使用消息机制处理不同Activity之间的通信,如:主Activity调用子Activity,在子Activity返回来时,会发出信号通知主Activity,并传递结果。
4. Activity回退处理:Activity提供回退键功能,有三种反应:关闭当前Activity、回到上一Level、回回到桌面,它可以使用finish()方法关闭Activity,也可以配置点击回退键的行为。
5. Activity启动流程:Activity的启动流程涉及到Activity的创建(onCreate())、显示(onResume())、销毁(onDestory())等,为确保正常运行,只能在对应的生命周期回调函数中完成对应的操作。
6. Activity进阶功能:Activity可以切花Window悬浮方式,可以显示2个Activity同时存在,并可以支持悬浮窗等功能;Activity也可以支持高斯模糊,可以达到Android手机拨号等效果;可以添加植入式广告、视频等功能,实现定制化内容展示。
7. Activity性能提升:可以使用代理类或模板技术,将不活跃的界面保持活跃状态,减少界面的资源重新加载;可以在onStop()函数实现缓存,减少不必要的逻辑操作。
以上就是Activity的用法,在Android开发中熟练运用Activity,可以有效提升应用程序的体验和性能。
Activity的生命周期及回调方法
Android上机实验报告课程名称:Android 应用开发技术教师姓名:江有福日期:09.23 学号:150607131 学生姓名:班级:Z15计算机院系:数理与信息学院图1 第一个Activity的运行结果图2 第二个Activity的运行结果2.5、范例2:实现应用对话框主题的关于Activity在Eclipse中创建Android项目,实现应用对话框主题的关于Activity。
范例1:实现根据身高计算标准体重在Eclipse中创建Android项目,实现根据输入的性别和身高计算标准体重。
图1 输入性别和身高界面图2 显示计算结果界面范例2:带选择头像的用户注册在Eclipse中创建Android项目,实现带选择头像的用户注册页面,打开新的Activity选择头像,并将选择的头像返回到原Activity中。
9.创建Fragment要创建一个Fragment,必须创建一个Fragment的子类,或者继承自另一个已经存在的Fragment的子类。
例如,要创建一个名称为NewsFragment,并重写onCreateView()方法,可以使用下面的代码。
public class NewsFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// 从布局文件news.xml 加载一个布局文件View v = inflater.inflate(yout.news, container, true);return v;}}Fragment比较强大的功能之一就是可以合并两个Activity,从而让这两个Activity在一个屏幕上显示,例如下图所示(参照Android官方文档),左边的两个图分别代表两个Activity,右边的这个图表示包括两个Fragment的Activity,其中第一个Fragment的内容是Activity A,第二个Fragment的内容是Activity B。
Activity的生命周期
执行状态---->暂停状态:
当一个activity实例处于暂停状态的时候,这时候会触发onPause()状态
暂停状态---->执行状态:
这时候会触发onResume()
执行状态---->停止状态:
当一个新的activity打开之后会覆盖掉原来的activity,这时原来的activity处于停止状体,这是会调用onPause()和onStop()方法
声明:这两个方法只会在activity对象被系统自动回收的情况下才会调用,但是如果是按BACK键将一个Activity对象销毁系统是不会调用
这两个方法的。
方法之前】。他会将以名称-值对方式记录了activity动作状态的Bundle对象传递给onSaveInstanceState()方法。当activity再次启动
时,这个Bundle会传递给onCreate()方法和随着onSart()方法调用的onRestoreInstanceState(),所以他们两个都可以恢复捕获的状态。
对于onSaveInstanceState()和onRestoreInstanceState()方法知识的补充:
当系统而不是用户自己出于回收内存的考虑,关闭了一个activity之后。用户会期望当他再次回到那个activity的时候,它仍保持着
上次离开时的样子。为了获取activity被杀死前的状态,那么应该在android系统回收activity被回收之前调用该方法【最好是在onPause
void onStart()
void onRestart()
void onResume()
void onPause()
安卓组件实验报告
一、实验目的1. 理解并掌握Android中的主要组件,包括Activity、Service、BroadcastReceiver和ContentProvider。
2. 学会使用Intent在不同组件之间进行数据传递和组件启动。
3. 了解组件的生命周期和相互之间的关系。
二、实验环境1. 开发工具:Android Studio2. 操作系统:Windows 103. 硬件环境:个人电脑三、实验内容1. Activity组件实验步骤:(1)创建一个名为“MainActivity”的Activity。
(2)在MainActivity中添加一个按钮和一个文本视图。
(3)编写按钮的点击事件,使当按钮被点击时,在文本视图中显示“Hello, Android!”。
(4)运行程序,观察结果。
2. Service组件实验步骤:(1)创建一个名为“MyService”的Service。
(2)在MyService中编写一个无限循环,用于模拟后台任务。
(3)在MainActivity中启动MyService,并在Service运行时在文本视图中显示“Service is running!”。
(4)运行程序,观察结果。
3. BroadcastReceiver组件实验步骤:(1)创建一个名为“MyReceiver”的BroadcastReceiver。
(2)在MyReceiver中重写onReceive()方法,用于接收自定义广播。
(3)在MainActivity中发送自定义广播,并注册MyReceiver。
(4)运行程序,观察结果。
4. ContentProvider组件实验步骤:(1)创建一个名为“MyContentProvider”的ContentProvider。
(2)在MyContentProvider中定义一个Uri,用于访问数据。
(3)在MainActivity中查询MyContentProvider中的数据,并显示在文本视图中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二Activity组件的生命周期一、实验目的1.了解Activity组件的生命周期;2.了解Activity组件的运行状态;3.掌握Activity事件回调函数的作用和调用关系。
二、Activity相关知识Activity是Android组件中最基本也是最为常见用的四大组件之一(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)。
Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。
在一个android应用中,一个Activity 通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity之间通过Intent进行通信。
在android 中,Activity 拥有四种基本状态:1、Active/Runing一个新Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。
2、Paused当Activity失去焦点,被一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶,此时的状态叫做暂停状态(Paused)。
此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。
所以它仍然可见,但已经失去了焦点故不可与用户进行交互。
3、Stoped如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。
它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。
4、Killed如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。
当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。
状态转换当一个Activity 实例被创建、销毁或者启动另外一个Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。
图2.1说明了Activity 在不同状态间转换的时机和条件:9图2.1. Activity 的状态转换如图2.1所示,Android 程序员可以决定一个Activity 的“生”,但不能决定它的“死”,也就时说程序员可以启动一个Activity,但是却不能手动的“结束”一个Activity。
当你调用Activity.finish()方法时,结果和用户按下BACK 键一样:告诉Activity Manager 该Activity 实例完成了相应的工作,可以被“回收”。
随后Activity Manager 激活处于栈第二层的Activity 并重新入栈,同时原Activity 被压入到栈的第二层,从Active 状态转到Paused 状态。
例如:从Activity1 中启动了Activity2,则当前处于栈顶端的是Activity2,第二层是Activity1,当我们调用Activity2.finish()方法时,Activity Manager 重新激活Activity1 并入栈,Activity2 从Active 状态转换Stoped 状态,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被执行,Activity2 返回的数据通过data参数返回给Activity1。
Activity 栈Android 是通过一种Activity 栈的方式来管理Activity 的,一个Activity 的实例的状态决定它在栈中的位置。
处于前台的Activity 总是在栈的顶端,当前台的Activity 因为异常或其它原因被销毁时,处于栈第二层的Activity 将被激活,上浮到栈顶。
当新的Activity 启动入栈时,原Activity 会被压入到栈的第二层。
一个Activity 在栈中的位置变化反映了它在不同状态间的转换。
Activity所示:的状态与它在栈中的位置关系如图2.2如图 2.2所示,除了最顶层即处在Active 状态的Activity 外,其它的Activity 都有可能在系统内存不足时被回收,一个Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。
系统负责管理栈中Activity 的实例,它根据Activity 所处的状态来改变其在栈中的位置。
Activity中有7个与生命周期有关的函数。
其中onCreate()是Activity第一次启动时执行,主要是初始化一些变量,绑定数据或恢复信息等;onStart()是Activity 界面被显示出来的时候执行;onRestart()是当前Activity重新被启动时调用;onResume()是当该Activity与用户能进行交互时被执行;onPause()是另一个Activity被启动,当前的Activity就被暂停了,一般在该函数中执行保存当前的数据或资源;onStop()表示另一个Activity被启动完成时,当前Activity对用户完全不可见时才调用;onDestroy()是退出当前Activity时调用的,另外,如果程序中调用finish()或者Android系统当前资源不够用时也会被调用。
这7个生命周期函数的调用顺序如图2.3所示。
图2.3 Activity生命周期函数的调用顺序(状态转换的方法与实现)在图2.3中,Activity有三个关键的循环:1. 整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。
Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。
例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。
2. 可见的生命周期,从onStart()开始到onStop()结束。
在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。
在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个9IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。
onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。
3. 前台的生命周期,从onResume()开始到onPause()结束。
在这段时间里,该Activity处于所有Activity的最前面,和用户进行交互。
Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个Activity处理结果被分发时,当一个新的Intent被分发时。
所以在这些接口方法中的代码应该属于非常轻量级的。
三、实验内容1、创建Activity生命周期程序在Eclipse中建立Android工程,工程名为LifeCycle,建好后在LifeCycle. java 中添加与Activity生命周期有关的函数:onStart (),onRestart(),onResume(),onPause(),onStop(),onDestroy()。
【参考代码】@Overrideprotected void onStart() {super.onStart();}代码可参考附录1.2、添加日志点向步骤1中建立的LifeCycle. java中相关的生命周期函数添加日志点,使用Android中的Log类可以实现添加日志点。
android.util.Log常用的方法有5个,分别为:Log.v(),Log.d(),Log.i(),Log.w()以及Log.e()。
根据首字母分别对应VERBOSE,DEBUG,INFO,WARN,ERROR,对应的优先级也是由低到高。
说明:(1)Log.v 的输出颜色是黑色,任何消息都会输出,这里的v代表verbose,表示详细信息,用法是Log.v("参数1","参数2"),参数1是标签,参数2是提示信息;(2)Log.d的输出颜色是蓝色,输出调试信息(debug),也会显示i、w和e的信息;(3)Log.i的输出颜色是绿色,一般提示性的消息(information),它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息;(4)Log.w的输出颜色是橙色,可以看作为警告信息(warning),同时它还会输出Log.e的信息。
(5)Log.e的输出颜色是红色,可以想到是错误信息(error),这里仅显示红色的错误信息。
【参考代码】@Overrideprotected void onStart() {super.onStart();Log.i(“LIFECYCLE”, “(2) onStart()”);}代码可参考附录2.3、打开控制台LogCat窗口在Eclipse菜单栏上选择Window -> Show View -> Other,在弹出的窗口中展开Android项,然后选中LogCat,点击OK,如图2.4所示。
图2.4 Show View中选择LogCat这样,LogCat便显示在Eclipse下方的控制台区域。
如图2.5所示图2.5 Eclipse中的LogCat为了便于观察,可以设置LogCat过滤器,点击LogCat窗口中Saved Filter 部分的绿色加号,打开LogCat信息过滤器设置窗口,设置一个名为LogFilter,过滤条件为“标签名=LIFECYCLE”的过滤器,如图2.6所示。
9图2.6 LogCat过滤器4、观察并记录生命周期函数的调用情况分别在不同情况下运行程序,观察7个Activity生命周期函数的调用情况,同时记录下来。
(1)全生命周期正常启动LifeCycle程序,然后通过模拟器的返回键关闭程序,观察并记录控制台的输出。
(2)可视生命周期正常启动LifeCycle程序,然后通过“呼出/接听键”启动内置的拨号程序,再通过“返回键”退出拨号程序,重新回到LifeCycle程序,观察并记录控制台的输出。