Android中的Activity的生命周期函数

Android中的Activity的生命周期函数
Android中的Activity的生命周期函数

Android开发历程_3(Activity生命周期)

Activity中有7个与生命周期有关的函数。其中onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;onStart()是activity界面被显示出来的时候执行的;onResume()是当该activity与用户能进行交互时被执行;onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。

当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。

Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。

这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。

参考资料为mars老师的资料。

官方给出关于这7个生命周期的图如下:

下面这个实验是有2个activity,第1个activity中有一个按钮调用第2个activity,并且每个activity 都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示是是哪个activity在执行哪个生命周期函数。

实验过程当显示出了第1个activity后,单击Next Activity!按钮,这是会显示第2个activity,然后又按系统的返回键,返回第1个界面。

这时候打印出来的结果如下图所示:

由此可见,一开始程序运行时是首先调用第1个activity的onCreate(),onStart(),onResume()函数,然后按下button后,调用第1个activity的onPause(),和第2个activity的

onCreate(),onStart(),onResume()函数,然后接着调用第1个activity的onStop(),当按下系统返回键时,这时会调用第2个activity的onPause(),接着是第1个activity的

onRestart(),onStart(),onResume(), 最后是调用第2个的onStop()和onDestroy().

界面1如下所示:

界面2如下所示:

MainActivity.java:

package com.example.lifeone;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

private Button btn;

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(https://www.360docs.net/doc/2110338622.html,yout.activity_main);

btn = (Button)findViewById(R.id.next_activity);

btn.setText(R.string.next_activity);

System.out.println("first activity: onCreate()");

btn.setOnClickListener(new MyNextActivity());

}

@Override

protected void onDestroy() {

System.out.println("first activity: onDestroy()");

super.onDestroy();

}

@Override

protected void onPause() {

System.out.println("first activity: onPause()");

super.onPause();

}

@Override

protected void onRestart() {

System.out.println("first activity: onRestart()");

super.onRestart();

}

@Override

protected void onResume() {

System.out.println("first activity: onResume()");

super.onResume();

}

@Override

protected void onStart() {

System.out.println("first activity: onStart()");

super.onStart();

}

@Override

protected void onStop() {

System.out.println("first activity: onStop()");

super.onStop();

}

class MyNextActivity implements OnClickListener

{

public void onClick(View v) {

Intent intent = new Intent();

intent.setClass(MainActivity.this, SecondActivity.class); MainActivity.this.startActivity(intent);

}

}

}

SecondActivity.java:

package com.example.lifeone;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

public class SecondActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

System.out.println("second activity:onCreate()");

super.onCreate(savedInstanceState);

setContentView(https://www.360docs.net/doc/2110338622.html,yout.activity_second);

}

@Override

protected void onDestroy() {

System.out.println("second activity: onDestroy()");

super.onDestroy();

}

@Override

protected void onPause() {

System.out.println("second activity: onPause()");

super.onPause();

}

@Override

protected void onRestart() {

System.out.println("second activity: onRestart()");

super.onRestart();

}

@Override

protected void onResume() {

System.out.println("second activity: onResume()");

super.onResume();

}

@Override

protected void onStart() {

System.out.println("second activity: onStart()");

super.onStart();

}

@Override

protected void onStop() {

System.out.println("second activity: onStop()");

super.onStop();

}

}

Activity生命周期详解

学习并掌握Activity生命周期,对从事Android开发(或者打算日后从事这方面的开发工作)的朋友来讲,是至关重要的。本文将用图解和实例的方式,向大家详细讲解Activity 生命周期的有关知识。 Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。 2.当它上面有另外一个Activity,使它失去了焦点但仍然对用户可见时(如图),它处于暂停状态。在它之上的Activity没有完全覆盖屏幕,或者是透明的,被暂停的Activity仍然对用户可见,并且是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接)。如果系统处于内存不足时会杀死这个Activity。

3.当它完全被另一个Activity覆盖时则处于停止状态。它仍然保留所有的状态和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。 当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化: void onCreate(Bundle savedInstanceState) void onStart()

void onRestart() void onResume() void onPause() void onStop() void onDestroy() 这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。Activity 在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程,而在onDestroy()销毁线程。 Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。onStart() 和onStop() 方法可以随着应用程序是否为用户可见而被多次调用。 Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。当

实验2-Activity组件的生命周期

实验二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

Android生命周期详解

Android生命周期详解 在Android 中,多数情况下每个程序都是在各自独立的Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;当这个程序没有必要再运行下去且系统需要回收这个进程的内存用于其他程序时,这个进程就“死亡”了。可以看出,Android 程序的生命周期是由系统控制而非程序自身直接控制。这和我们编写桌面应用程序时的思维有一些不同,一个桌面应用程序的进程也是在其他进程或用户请求时被创建,但是往往是在程序自身收到关闭请求后执行一个特定的动作(比如从main 函数中return)而导致进程结束的。要想做好某种类型的程序或者某种平台下的程序的开发,最关键的就是要弄清楚这种类型的程序或整个平台下的程序的一般工作模式并熟记在心。在Android 中,程序的生命周期控制就是属于这个范畴——我的个人理解:) 在Android 系统中,当某个activity调用startActivity(myIntent) 时,系统会在所有已经安装的程序中寻找其intent filter 和myIntent 最匹配的一个activity,启动这个进程,并把这个intent 通知给这个activity。这就是一个程序的“生”。比如我们在Home application 中选择“Web browser”,系统会根据这个intent 找到并启动Web browser 程序,显示Web browser 的一个activity 供我们浏览网页(这个启动过程有点类似我们在在个人电脑上双击桌面上的一个图标,启动某个应用程序)。在Android 中,所有的应用程序“生来就是平等的”,所以不光Android 的核心程序甚至第三方程序也可以发出一个intent 来启动另外一个程序中的一个activity。Android 的这种设计非常有利于“程序部件”的重用。

实验6 深入理解Activity

实验6深入理解Activity 一、实验目的 1、掌握Activity的开发、配置和使用。 2、了解Activity的生命周期。 二、实验步骤 1、使用Bundle在Activity之间交换数据,运行的效果如下所示。 图1 第1个Actvity界面图2 通过第1个Actvity启动第2个Activity 要求与注意事项: 1、Activity01.java源代码所对应的布局文件main.xml文件,请参考图1自己编写。 2、OtherActivity.java源代码所对应的布局文件other.xml文件,请参考图2自己编写。 3、注意在AndroidManifest.xml文件中配置两个Activity。 第一个Activity的代码,即com.whq.Activity01.java,请补充所缺代码,给代码添加注释。 package com.whq; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;

import android.view.View.OnClickListener; import android.widget.Button; public class Activity01 extends Activity { private Button myButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/2110338622.html,yout.main); myButton = (Button) findViewById(R.id.myButton); myButton.setOnClickListener(new MyButtonListener()); } class MyButtonListener implements OnClickListener { @Override public void onClick(View v) { // 生成一个Intent对象 Intent intent = new Intent(Activity01.this,OtherActivity.class); startActivity(intent); } } } 第2个Activity的代码 package com.whq; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class OtherActivity extends Activity{ private TextView myTextView = null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/2110338622.html,yout.other); //取得从上一个Activity当中传递过来的Intent对象 Intent intent = getIntent(); //从Intent当中根据key取得value String value = intent.getStringExtra("testIntent"); //根据控件的ID得到响应的控件对象 myTextView = (TextView)findViewById(R.id.myTextView); //为控件设置Text值

(完整版)Android应用开发期末考试题

试题 一、选择题 1 android虚拟设备的缩写是(AVD) 2 Android SDK目前支持的操作系统(DOS) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 6以下不是Android中调试项目的正确步骤(测试用例) 7下列不是Activity的生命周期方法之一的是(OnResume) 8以下可以做EditText编辑框的提示信息是(adroid:hint) 9以下不是Activity启动的方法是(gotoActivity) 10以下不是手机操作系统的是(windows vista) 二、填空题 1 Android平台由操作系统,中间件,用户界面和应用软件组成的。 2 Android平台提供了2D,3D的图形支持,数据库支持SQLite,并且集成了浏览器 3目前已知的可以用来搭建Android开发环境的系统有windows,Linux,Mac 等4开发中推荐使用的IDE开发组合为IDE,eclipse,ADI来开发 5 Android SDK主要以java语言为基础 6创建工程时需要填写的信息名称有工程名,包的名字,Activity的名字还有应用的名字

7 Android.jar是一个标准的压缩包,其内容包含的是编译后的class,包含了全部的API 三、简答题 1 Android SDK中API的包结构的划分?至少五个 android.util,android.os,android.content,android.view,android.graphics,android.text 2 Android软件框架结构自上而下可分为哪些层? 应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(RunTime)、操作系统层(OS) 3 Android应用程序的4大组件是什么? Activity、Broadcast Intent Receiver、Service、Content Provider 4 Android应用工程文件结构有哪些? 源文件(包含Activity),R.java文件,Android Library,assets目录res目录,drawble目录,layout目录,values目录,AndroidManifest.xml 5 Android开发应用程序最有可能使用到的应用框架部分是哪些? 一组View(UI)组件,Content Providers,Resource Manger,Notification Manger,Activiy Manger 6 Android底层库包含哪些? 系统C库,媒体库,Surface Manager,LibWebCore,SGL 四、编程 1实现点击一个按钮,结束当前Activity并将需要返回的数据放置并关闭当前窗体请编写核心代码 Bundle bundle = new Bundle ( ); Bundle.putString(“store”,”数据来自Activity1”) ;

Android基础——Activity生命周期以及观察者模式应用

Android系统架构 Android目录结构 1.src目录 src目录中存放的是该项目的源代码,其内部结构会根据用户所声明的包自动组织,该

目录的组织方式为src/com/jiang/Main.java,程序员在项目开发过程中,大部分时间是对该目录下的源代码文件进行编写。 2.gen目录 该目录的文件是ADT自动生成的,并不需要人为地去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,项目中用户界面、字符串、图片、声音等资源都会在该类中创建其唯一的ID,当项目中使用这些资源时,会通过该类得到资源的引用。 3.Android2.2 该目录中存放的是该项目支持的JAR包,同时还包含项目打包时需要的META-INF目录。 4.assets目录 该目录用于存放项目相关的资源文件,例如文本文件等,在程序中可以使用”getResources.getAssets().open(“text.txt”)”得到资源文件的输入流InputStream对象。 5.res目录 该目录用于存放应用程序中经常使用的资源文件,包括图片、声音、布局文件及参数描述文件等,包括多个目录,其中以drawable开头的三个文件夹用于存储.png、.9.png、.jpg 等图片资源。layout文件夹存放的是应用程序的布局文件。raw用于存放应用程序所用到的声音等资源。value存放的则是所有XML格式的资源描述文件,例如字符串资源的描述文件strings.xml、样式的描述文件style.xml、颜色描述文件colors.xml、尺寸描述文件dimens.xml,以及数组描述文件arrays.xml等。 6.AndroidManifest.xml文件 该文件为应用程序定义了全局的配置信息。这个文件列出了应用程序所提供的功能,包括四大组件、版本、权限等等。在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。 android:versionCode是给设备程序识别版本(升级)。 android:versionName是给用户看的。 7.default.properties文件 该文件为项目的配置文件,不需要认为改动,系统会自动为其进行管理,其中主要描述了该项目的版本等信息。

Android中的Activity的生命周期函数

Android开发历程_3(Activity生命周期) Activity中有7个与生命周期有关的函数。其中onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;onStart()是activity界面被显示出来的时候执行的;onResume()是当该activity与用户能进行交互时被执行;onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。 当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。 Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。 这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。 参考资料为mars老师的资料。 官方给出关于这7个生命周期的图如下:

Activity生命周期解说

Activity生命周期解说 二、事件方法链 2.1进入Activity onCreate -> onStart -> onResume 2.2BACK键 onPause->onStop->onDestroy 2.3HOME键 Home键退出:onPause->onStop Home键回来:onRestart -> onStart->onResume 2.4休眠/恢复 休眠:onPause

恢复:onResume 2.5旋转屏幕 未设置android:configChanges: onPause -> onStop -> onDestory -> onCreate -> onStart -> onResume 设置了android:configChanges="orientation|keyboardHidden": 不会触发生命周期方法,参见文章这里。 2.6来电 来电,显示来电界面: onPause -> onStop 关闭电话界面,重新回到当前Activity: onRestart -> onStart->onResume 2.7其他Activity 进入下一个Activity: onPause -> onStop 从其他Activity返回至当前Acitivity: onRestart -> onStart->onResume 三、与Activity生命周期结合的应用场景 3.1与广播(Broadcast)结合 在onResume注册广播(registerLinstener),在onPause注销广播(unregisterLinstener)。例如: 做"摇一摇"功能(传感器)、监听网络变化,就可以在onResume中注册监听,在onPause里注销掉,已节省资源提高效率。 3.2与服务(Service)结合 在onStart绑定服务(bindService),在onStop中取消绑定(unbindService)。例如:

黑马程序员安卓教程:Service 的生命周期回调函数

Service 的生命周期回调函数 和Activity 一样,service 也有一系列的生命周期回调函数,你可以实现它们来监测service 状态的变化,并且在适当的时候执行适当的工作。 Like an activity, a service has lifecycle callback methods that you can implement to monitor changes in the service's state and perform work at the appropriate times. The following skeleton service demonstrates each of the lifecycle methods: 13

下面的service展示了每一个生命周期的方法: 【文件1-5】Service生命周期回调函数 1.public class TestService extends Service { 2.int mStartMode; //indicates how to behave if the service is killed 3.IBinder mBinder;// interface for clients that bind 4.boolean mAllowRebind;// indicates whether onRebind should be used 5. 6.@Override 7.public void onCreate() { 8.// The service is being created 9.} 10. 11.@Override 12.public int onStartCommand(Intent intent, int flags,int startId){ 13.// The service is starting, due to a call to startService() 14.return mStartMode; 15.} 16. 17.@Override 18.public IBinder onBind(Intent intent) { 19.// A client is binding to the service with bindService() 20.return mBinder; 21.} 22. 23.@Override 24.public boolean onUnbind(Intent intent) { 25.// All clients have unbound with unbindService() 26.return mAllowRebind; 27.} 28. 29.@Override 30.public void onRebind(Intent intent){ 31.// A client is binding to the service with bindService(), 32.// after onUnbind() has already been called 33.} 34. 35.@Override 36.public void onDestroy(){ 37.// The service is no longer used and is being destroyed 38.} 39.} 注意:不同于Activity的生命周期回调方法,Service不须调用父类的生命周期回调方法。 Unlike the activity lifecycle callback methods,you are not required to call the superclass implementation of these callback methods. 14

Android实验报告

Android实验报告 专业:计算机科学与技术 班级: 学号: 姓名:武易 2016年11月28日 实验一Activity 生命周期 一、实验目的 Android 生命周期是从程序启动到程序终止的过程。通过本次实验深入理解Android 系统管理生命周期的必要性,并以Activity 为例说明Android 系统是如何管理程序组件的生命周期。 二、实验设备 1、硬件设备系统类型:Win7 版本32 位,处理器: Intel(R)Core(TM)i3-2350M CPU @2.30GHz 2.30GHz 安装内存 (RAM):8.00GB 2、软件设备Win7 操作系统、Eclipse、JDK、Android SDK、ADT 三、实验内容 1、实验要求 观察Activity的生命周期。 2、详细设计 public class MainActivity extends ActionBarActivity {

private static String TAG="LIFECYCLE"; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.i(TAG,"(1) onCreate()"); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View view){ finish(); } }); } @Override public void onStart(){ super.onStart(); Log.i(TAG,"(2) onStart()"); } @Override public void onRestoreInstanceState(Bundle savedInstanceState){ super.onRestoreInstanceState(savedInstanceState); Log.i(TAG,"(3) onRestoreInstanceState()"); } @Override

Android Activity生命周期解析

Android Activity生命周期解析 摘要:Android(安致)操作系统应用包括四个部分:Activity活动,Intent Reciver,service和Content provider。其中,一个activity是应用中的一个单一的屏幕,它继承自Activity类,它将显示由Views组成的UI以及响应事件。 关键词:Android;Activity;生命周期 中图分类号:TP311.52 文献标识码:A文章编号:1007-9599 (2011) 10-0000-01 Android Activity Life Cycle Analysis Li Jiajun (China University of Mining&Technology Resources Institute,Xuzhou221000,China) Abstract:Android operating system applications include four parts:Activity activity,Intent Reciver,service,and Content provider.Among them,an activity is the application of a single screen,it inherits from the Activity class,it will show the composition of the Views UI,and respond to events. Keywords:Android;Activity;Life cycle Android(安致)底层以Linux内核工作为基础,

Android 应用程序的生命周期

Android 应用程序的生命周期 Android 是一构建在Linux 之上的开源移动开发平台,在Android 中,多数情况下每个程序都是在各自独立的Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;当这个程序没有必要再运行下去且系统需要回收这个进程的内存用于其他程序时,这个进程就“死亡”了。可以看出,Android 程序的生命周期是由系统控制而非程序自身直接控制。这和我们编写桌面应用程序时的思维有一些不同,一个桌面应用程序的进程也是在其他进程或用户请求时被创建,但是往往是在程序自身收到关闭请求后执行一个特定的动作(比如从main 函数中return)而导致进程结束的。要想做好某种类型的程序或者某种平台下的程序的开发,最关键的就是要弄清楚这种类型的程序或整个平台下的程序的一般工作模式并熟记在心。在Android中,程序的生命周期控制就是属于这个范畴——我的个人理解:) 在Android 系统中,当某个activity(应用程序的一个“帧”)调用startActivity(myIntent) 时,系统会在所有已经安装的程序中寻找其intent filter和myIntent 最匹配的一个activity,启动这个进程,并把这个intent通知给这个activity。这就是一个程序的“生”。比如我们在Home application 中选择“Web browser”,系统会根据这个intent 找到并启动Web browser 程序,显示Web browser 的一个activity 供我们浏览网页(这个启动过程有点类似我们在在个人电脑上双击桌面上的一个图标启动某个应用程序)。在Android 中,所有的应用程序“生来就是平等的”,所以不光Android 的核心程序甚至第三方程序也可以发出一个intent 来启动另外一个程序中的一个activity。Android 的这种设计非常有利于“程序部件”的重用。 一个Android 程序的进程是何时被系统结束的呢?通俗地说,一个即将被系统关闭的程序是系统在内存不足(low memory)时,根据“重要性层次”选出来的“牺牲品”。一个进程的重要性是根据其中运行的部件和部件的状态决定的。各种进程按照重要性从高到低排列如下: 1. 前台进程。这样的进程拥有一个在屏幕上显示并和用户交互的activity 或者它的一个IntentReciver 正在运行。这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束。 2. 可见进程。在屏幕上显示,但是不在前台的程序。比如一个前台进程以对话框的形式显示在该进程前面。这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束。 3. 服务进程。这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等。这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束。 4. 后台进程。这样的程序拥有一个用户不可见的activity。这样的程序在系统内存不足时,按照LRU 的顺序被结束。 5. 空进程。这样的进程不包含任何活动的程序部件。系统可能随时关闭这类进程。 从某种意义上讲,垃圾收集机制把程序员从“内存管理噩梦”中解放出来,而Android 的进程生命周期管理机制把用户从“任务管理噩梦”中解放出来。我见过一些Nokia S60 用户和Windows Mobile 用户要么因为长期不关闭多余的应用程序而导致系统变慢,要么因为不时查看应用程序列表而影响使用体验。Android 使用Java 作为应用程序API,并且结合其独特的生命周期管理机制同时为开发者和使用者提供最大程度的便利。

android中手机切屏是activity生命周期的变化

android点滴(12) -- 1. Android横竖屏切换时,Activity的生命周期的变化 (面试题) 2011/10/15 10:49:48 | 阅读40次 1.Android横竖屏切换时,Activity的生命周期的变化。 Activity的生命周期 /Files/cod y1988/ActivityLifeCycle.rar 完整生命周期(the entire lifetime) onCreate , onDestroy 在创建和销毁的时候调用。在onCreate中初始化全局资源,在onDestroy中销毁资源。

可见生命周期(the visible lifetime) onStart , onStop 这是Activity可见,但是未必可交互即未必在最前面。维护着用户可见的资源。 前景周期(the for eground lifetime) onResume , onPause 此时Activity在最前面,可与用户交互。一个Activity 可在Resume与Pause之间频繁的切换例如设备休眠。因此这两个方法中只有相当轻量级的调用。 横竖屏切换时Activity的生命周期的变化与activity的configChanges的配置有关。 1.configChanges不配置 运行: 初始时TextView显示的内容为“Hello World, LifeCycle!”,点击Button

竖屏切换为横屏: 此时TextView的内容重新变为“Hello World, LifeCycle!” 横屏切换为竖屏:

2.配置configChanges …… 运行,点击Button 竖屏切换为横屏: 没有发生变化 横屏切换为竖屏: 没有发生变化 结论:横竖屏切换时Activity的生命周期与configChanges的配置相关。1.如果不配置,则要先销毁Activity再创建,销毁的过程中会调用onSaveInstanceState, 2.如果配置configChanges为Orientation则不销毁

Android实验报告生命周期

Android 开发 (实验四) 实验题目:Activity生命周期验证试验指导老师: 班级:计算机科学与技术系班 姓名:(

一、实验目的 1、深入理解Activity运行机制和原理。 2、掌握Activity的声明周期各个阶段工作流程。 3、掌握多个Activity之间生命周期的转换过程。 4、通络Intent实现多页面之间数据的传递(辅助完成)。 二、实验内容 1、搭建任意组件,设计多个界面,运行程序观察其生命周期的 情况。 2、使用Intent实现页面之间数据的传递。 三、实验代码 AlifecyfleActivity.java package com.wr; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class AlifecycleActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/2110338622.html,yout.main); Button BtnStart = (Button) findViewById(R.id.BtnStart); BtnStart.setOnClickListener(new MyBtnClickListener()); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy();

android的生命周期

在Android 中,多数情况下每个程序都是在各自独立的Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;当这个程序没有必要再运行下去且系统需要回收这个进程的内存用于其他程序时,这个进程就“死亡”了。可以看出,Android 程序的生命周期是由系统控制而非程序自身直接控制。这和我们编写桌面应用程序时的思维有一些不同,一个桌面应用程序的进程也是在其他进程或用户请求时被创建,但是往往是在程序自身收到关闭请求后执行一个特定的动作(比如从main 函数中return)而导致进程结束的。要想做好某种类型的程序或者某种平台下的程序的开发,最关键的就是要弄清楚这种类型的程序或整个平台下的程序的一般工作模式并熟记在心。在Android 中,程序的生命周期控制就是属于这个范畴——我的个人理解:) 在Android 系统中,当某个activity调用 startActivity(myIntent) 时,系统会在所有已经安装的程序中寻找其intent filter 和myIntent 最匹配的一个activity,启动这个进程,并把这个intent 通知给这个activity。这就是一个程序的“生”。比如我们在Home application 中选择“Web browser”,系统会根据这个intent 找到并启动Web browser 程序,显示Web browser 的一个activity 供我们浏览网页(这个启动过程有点类似我们在在个人电脑上双击桌面上的一个图标,启动某个应用程序)。在Android 中,所有的应用程序“生来就是平等的”,所以不光Android 的核心程序甚至第三方程序也可以发出一个intent

Activity生命周期

Activity生命周期: 图1

图2 1.图中包括两层循环: 第一层循环是onPause -> onResume -> onPause(焦点生命周期,该生命周期始终可见) 第二层循环是onStop -> onRestart -> onStart -> onResume -> onPause->onStop(可见与不可见生命周期循环,但大多数情况下可见,只有当执行onStop方法后,activity才不可见) 整体生命周期:从onCreate开始到onStop结束。 2.图中包含四个阶段: 开始Activity:在这个阶段依次执行3个生命周期方法:onCreate、onStart和onResume。Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,这时当前的Activity会失去焦点。在这一阶段,会依次执行onPause和onStop方法。 如果在执行onPause方法的过程中Activity重新获得了焦点,然后又失去了焦点。系统将不会再执行onStop方法,而是按着如下的顺序执行相应的生命周期方法: onPause -> onResume-> onPause Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期方法:onRestart、onStart和onResume。

如果在执行onStop方法的过程中Activity重新获得了焦点,然后又失去了焦点。系统将不会执行onDestroy方法,而是按着如下的顺序执行相应的生命周期方法: onStop -> onRestart -> onStart -> onResume -> onPause -> onStop 关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法:onPause、onStop和onDestroy。 注意:在图2所示的Activity生命周期里可以看出,系统在终止应用程序进程时会调用onPause、onStop和onDesktroy方法。而onPause方法排在了最前面,也就是说,Activity 在失去焦点时就可能被终止进程,而onStop和onDestroy方法可能没有机会执行。因此,应该在onPause方法中保存当前Activity状态,这样才能保证在任何时候终止进程时都可以执行保存Activity状态的代码! 实例:假设有一个程序由2个Activity A和B组成,A是这个程序的启动界面。当用户启动程序时,Process和默认的Task分别被创建,接着A被压入到当前的Task中,依次执行了onCreate, onStart, onResume事件被呈现给了用户;此时用户选择A中的某个功能开启界面B,界面B被压入当前Task遮盖住了A,A的onPause事件执行,B的onCreate, onStart, onResume事件执行,呈现了界面B给用户;用户在界面B操作完成后,使用Back键回到界面A,界面B不再可见,界面B的onPause, onStop, onDestroy执行,A的onResume事件被执行,呈现界面A给用户。此时突然来电,界面A的onPause事件被执行,电话接听界面被呈现给用户,用户接听完电话后,又按了Home键回到桌面,打开另一个程序“联系人”,添加了联系人信息又做了一些其他的操作,此时界面A不再可见,其行onStop事件被执行,但并没有被销毁。此后用户重新从菜单中点击了我们的程序,由于A和其所在的进程和Task 并没有被销毁,A的onRestart 和onStart事件被执行,接着A的onResume事件被执行,A 又被呈现给了用户。用户这次使用完后,按Back键返回到桌面,A的onPause, onStop被执行,随后A的onDestroy被执行,由于当前Task中已经没有任何Activity,A所在的Process的重要程度被降到很低,很快A所在的Process被系统结束。

相关文档
最新文档