activity生命周期回调析构函数什么时候调用

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
Activity生命周期-基于Android的移动应用开发.ppt42页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:80 &&
你可能关注的文档:
··········
··········
基于Android 的
移动应用开发
ACTIVITY 生命周期
西安交通大学软件学院Activity 生命周期
了解Android 系统的进程优先级的变化方式了解Android 系统的四大基本组件了解Activity 的生命周期中各状态的变化关系掌握Activity 事件回调函数的作用和调用顺序
2程序生命周期
程序的生命周期程序的生命周期是在Android 系统中进程从启动到终止的所有
阶段,也就是Android 程序启动到停止的全过程程序的生命周期由Android 系统进行调度和控制的3程序生命周期
Android系统中的进程优先级由高
到低前台进程可见进程服务进程后台进程空进程
4程序生命周期
前台进程前台进程是Android 系统中最重要的进程,是与用户正
在交互的进程,包含以下四种情况进程中的Activity 正在与用户进行交互进程服务被Activity 调用,而且这个Activity 正在与用户进
行交互进程服务正在执行生命周期中的回调函数,如
onCreate 、onStart 或onDestroy进程的BroadcastReceiver 正在执行onReceive 函数Android 系统在多个前台进程同时运行时,可能会出现
资源不足的情况,此时会清除部分前台进程,保证主
要的用户界面能够及时响应
5程序生命周期
可见进程可见进程指部分程序界面能够被用户看见,却不在前
台与用户交互,不响应界面事件的进程如果一个进程包含服务,且这个服务正在被用户可见
的Activity 调用,此进程同样被视为可见进程Android 系统一般存在少量的可见进程,只有在特殊的
情况下,Android 系统才会为保证前台进程的资源而清
除可见进程
6程序生命周期
服务进程服务进程是指包含已启动服务的进程没有用户界面在后台长期运行Android 系统除非不能保证前台进程或可视进程所必要的资源,
否则不强行清除服务进程
7程序生命周期
后台进程后台进程是指不包含任何已经启动的
正在加载中,请稍后...1439人阅读
前面介绍了Service和Braoadcast Receiver,下面介绍android的开发中用的最多的组件Activity;
对于Activity,关键是其生命周期的把握(如下图),其次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),以及Activity之间的跳转和数据传输(intent)。
Activity是一个应用程序组件,提供一个与用户交互完成某项任务(例如拨号、拍照、发送email、看地图)的视图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗
口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
  一个应用程序通常由多个activity组成,他们通常是松耦合关系。通常,应用程序中的其中一个activity被指定为&main&activity,就是第一次启动应用程序的时候呈现给用户的那个activity。每个activity可以启动另一个activity,为了完成不同的动作。每一次一个activity启动,前一个activity就停止了,但是前一个activity被系统保留activity的栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back
Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后恢复之前的activity。
  当一个activity因新的activity启动而停止,它被通知这种状态转变通过activity的生命周期回调函数。一个activity可能会收到许多回调函数,源于它自己的状态变化-无论系统
创建、停止、恢复、摧毁-并且每个回调提供你完成适合这个状态的指定工作的机会。例如,当停止的时候,你的activity应该释放任何大的对象,例如网络数据库连接。当
activity恢复,你可以重新获得必要的资源和恢复被中断的动作。这些状态转换都是activity的生命周期的部分。
如何创建一个activity
创建一个activity,你必须创建一个Activity的子类(或者一个Activity的子类的子类)。在子类中,你需要实现系统回调的回调方法,当activity在它的生命周期的多种状态中转换的
时候,例如当activity被创建、停止、恢复或摧毁。
两个最重要的回调方法是:
a) onCreate()
你必须实现这个方法。系统调用它当创建你的activity的时候。在你的实现中,你应该初始化你的activity的基本的组件。更重要的是,这里就是你必须调用setContentView()来定义activity用户接口而已的地方。
b) onPause()
系统调用这个方法当用户离开你的activity(虽然不总是意味着activity被摧毁)。这通常是你应该提交任何变化,那将会超越user session而存在的(因为用户可能不再回来)。
activity需要在AndroidManifest.xml中进行注册;
Activty的生命周期
先给官网所给的生命周期的图
这些函数定义了整个生命周期关于一个activity。通过实现这些方法,你可以监视三种嵌套的循环在activity生命周期中。
  1)一个activity的整个生命时间发生在onCreate()和onDestroy()函数之间。你的activity应该设置全局状态(例如定义布局)在onCreate(),并且释放所有的资源在onDestroy()。例如,如果你的activity有一个线程在后台跑,从网络下载数据,它可能创建那个线程在onCreate()然后停止线程在onDestroy()。
(onCreate-&onStart-&onResume-&onPause-&onStop-&onDestroy)正常的流程
(onStop-&onRestart-&onStart-&onResume-&onPause-&onStop-&onDestroy)unvisible
(onStop-&onCreate--&onStart-&onResume-&onPause-&onStop-&onDestroy)进程被kill的
  2)一个可视的生命期发生在onStart()和onStop()之间。在这期间,用户可以看见activity在屏幕上并且和它交互。例如,onStop()被调时当一个新的activity开始并且这个不再被可见。在这两个函数间,你可以维持资源那些需要用来展现activity给用户的。例如,你可以注册一个BroadcastReceiver在onStart(),然后注销在onStop()当用户不再看见你显示的东西。系统可能会调onStart()和onStop()多次在这整个生命线期间,当activity在是否可见间转换的时候。
(onStart-&onResume-&onPause-&onStop)正常的流程
(onStop-&onRestart-&onStart-&onResume-&onPause-&onStop)unvisible
(onStop-&onCreate--&onStart-&onResume-&onPause-&onStop-&onDestroy)进程被kill的
  3)一个activity的前景生命期发生在onResume()和onPause()之间。在这期间,此activity在所有其它activity之上在屏幕上,并且拥有用户焦点。一个activity可以经常转换进和转换出前景--例如,onPause被调用当设备准备休眠,当一个对话框产生。因为这种状态可以经常转换,代码在这两个状态应该轻量,为了避免减慢转换速度使得用户等待。
(onResume-&onPause)
下面实现生命周期中得回到函数,通过Log来解析下生命周期的三种情形;
package com.
import android.app.A
import android.app.AlertD
import android.app.AlertDialog.B
import android.content.DialogI
import android.content.DialogInterface.OnClickL
import android.content.I
import android.os.B
import android.util.L
import android.view.V
import android.widget.B
public class ActivityLifeCycleDemoActivity extends Activity {
final static private String TAG = &ActivityLifeCycleDemoActivity&;
/** Called when the activity is first created. */
* 创建activity时,一定会调用这个函数; 还有一种是再activity被系统强制销毁,重新创建activity的时候也会被调用;
* 这个函数中一般设置activity的布局;
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, &onCreate&);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnActivity = (Button) findViewById(R.id.btn_activity);
btnActivity.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ActivityLifeCycleDemoActivity.this.startActivity(new Intent());
Button btnDialog = (Button) findViewById(R.id.btn_dialog);
btnDialog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder builder = new Builder(
ActivityLifeCycleDemoActivity.this);
builder.setMessage(&确认退出吗?&);
builder.setTitle(&提示&);
builder.setPositiveButton(&确认&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
builder.setNegativeButton(&取消&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
builder.create().show();
* onstop相对应
protected void onStart() {
Log.d(TAG, &onStart&);
// TODO Auto-generated method stub
super.onStart();
* onstop相对应
protected void onRestart() {
Log.d(TAG, &onRestart&);
// TODO Auto-generated method stub
super.onRestart();
* onPause相对应, 获取焦点
protected void onResume() {
Log.d(TAG, &onResume&);
// TODO Auto-generated method stub
super.onResume();
* onResume相对应 当透明的activity或者视图在现有的activity上面时,会被调用;
protected void onPause() {
Log.d(TAG, &onPause&);
// TODO Auto-generated method stub
super.onPause();
* onRestart相对应
protected void onStop() {
Log.d(TAG, &onStop&);
// TODO Auto-generated method stub
super.onStop();
* 完全销毁activity
protected void onDestroy() {
Log.d(TAG, &onDestroy&);
// TODO Auto-generated method stub
super.onDestroy();
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
(1)正常的启动和关闭activity
(2)启动另外一个activity
如果在AndroidManifest.xml中增加android:theme=&@android:style/Theme.Dialog&
android:label=&@string/app_name&
android:theme=&@android:style/Theme.Dialog&
android:name=&.TestAActivity& &
&intent-filter &
&category android:name=&android.intent.category.DEFAULT& /&
&/intent-filter&
&/activity&
则在执行,就死第三种情况,
(3)启动一个透明的activity或者对话框
启动对话框,好像没有调用任何一个回调函数。。。。不知为什么。。。。
(1)onPause,onStop,onDestroy三种状态下的activity会在系统资源不足的时候,进程会被kill的;
(2)onPause()他们三个中的第一个被调用的,一旦activity被建立,onPause()是最后一个被保证调用的方法--如果系统必须恢复内存在紧急状态,然后onStop()和onDestroy()可能将不被调用。因此,你应该使用onPause()来写数据(例如edit)的存储。可是,你应该精心挑选哪个信息一定要在onPause()中留住,因为任何何阻塞的操作在这个函数阻塞到下一个activity的转换因而降低用户体验。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:58489次
排名:千里之外
原创:29篇
评论:18条
(1)(7)(1)(6)(10)(3)(1)将Activity的生命周期打印出来 - 下载频道
- CSDN.NET
&&&&将Activity的生命周期打印出来
将Activity的生命周期打印出来
对手机进行操作,例如锁屏 亮屏 解锁的
长按POWER键时会调用相关的回调函数,并打印到一个文本中,文本是保存到手机中
若举报审核通过,可奖励20下载分
被举报人:
eoeandroida
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
移动开发下载排行23965人阅读
本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。原书购买地址Activity这个类,定义了一些回调函数来控制它的生命周期。onCreate()& ——& 当Activity第一次创建的时候被调用。onStart()& ——& 当Activity对用户可见的时候被调用。onResume()& ——& 当Activity开始和用户交互的时候被调用。onPause()& ——& 正在运行的Activity马上要被暂停的时候被调用,此时,在这之前的Activity被重新获取。onStop()& ——& 当Activity不在对用户可见的时候被调用。默认地,被创建的Activity中都包含一个onCreate()方法,通过这个方法,可以创建显示给用户的UI组件。从“被创建”到“被销毁”的生命周期图示:想要理解Activity生命周期的最好办法就是创建一个工程,并实现所有的回调函数,然后让Activity与用户交互。1. 创建一个工程:Activity101。2. Activity101Activity.java中的代码。public class Activity101Activity extends Activity {
String tag = &Lifecycle&;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(tag, &In the onCreate() event&);
public void onStart() {
super.onStart();
Log.d(tag, &In the onStart() event&);
public void onRestart() {
super.onRestart();
Log.d(tag, &In the onRestart() event&);
public void onResume() {
super.onResume();
Log.d(tag, &In the onResume() event&);
public void onPause() {
super.onPause();
Log.d(tag, &In the onPause() event&);
public void onStop() {
super.onStop();
Log.d(tag, &In the onStop() event&);
public void onDestroy() {
super.onDestroy();
Log.d(tag, &In the onDestroy() event&);
}3. 按F11在模拟器上调试。4. 当这个activity第一次被加载:[plain] 03-23&01:54:32.602:&D/Lifecycle(644):&In&the&onCreate()&event&&03-23&01:54:32.602:&D/Lifecycle(644):&In&the&onStart()&event&&03-23&01:54:32.602:&D/Lifecycle(644):&In&the&onResume()&event&&5. 按“返回键”,程序退出:[plain] 03-23&01:58:28.307:&D/Lifecycle(644):&In&the&onPause()&event&&03-23&01:58:28.762:&D/Lifecycle(644):&In&the&onStop()&event&&03-23&01:58:28.837:&D/Lifecycle(644):&In&the&onDestroy()&event&&6. 重新进入程序:[plain] 03-23&01:59:38.282:&D/Lifecycle(644):&In&the&onCreate()&event&&03-23&01:59:38.292:&D/Lifecycle(644):&In&the&onStart()&event&&03-23&01:59:38.302:&D/Lifecycle(644):&In&the&onResume()&event&&7. 按“拨号键”进入拨号界面,activity被转入后台运行:[plain] 03-23&02:00:23.252:&D/Lifecycle(644):&In&the&onPause()&event&&03-23&02:00:24.522:&D/Lifecycle(644):&In&the&onStop()&event&&8. 注意,此时onDestroy()方法并没有被触发,说明这个activity还在内存中。按“返回键”,退出拨号界面,这个Activity又重新可见了。观察LogCat窗口中的输出:[plain] 03-23&02:03:25.262:&D/Lifecycle(644):&In&the&onRestart()&event&&03-23&02:03:25.262:&D/Lifecycle(644):&In&the&onStart()&event&&03-23&02:03:25.262:&D/Lifecycle(644):&In&the&onResume()&event&&onRestart()方法被触发了,接下来是onStart()和onResume()。可以从这个简单的例子中看到,当点击“返回键”的时候,activity被销毁了,与此同时,activity当前的状态也将消失。有一点需要特别注意,onPause()方法仅在两种情况下被调用:一个是在Activity被转入后台运行的时候,一个是用户按“返回键”将activity销毁的时候。当一个anctivity被启动之后,onStart()和onResume()方法总是要被调用的,无论这个activity是从后台重新获取的,还是首次被创建的。当一个anctivity第一次被创建的时候,onCreate()方法总是被调用。从上面的例子,我们可以得出结论:使用onCreate()方法去创建和初始化将要使用的组件。使用onResume()方法去开启服务和执行代码。当Activity处于“前台”模式下,这些服务和代码需要被开启或执行。使用onPause()方法去停止服务和阻断代码。当Activity处于“后台”模式下,这些服务和代码不需要被开启或执行。使用onDestroy()方法去释放资源。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1948491次
积分:11637
积分:11637
排名:第397名
原创:158篇
转载:18篇
译文:65篇
评论:284条
文章:85篇
阅读:420373
(2)(7)(17)(31)(46)(15)(8)(30)(11)(5)(1)(4)(1)(1)(1)(5)(1)(2)(53)

我要回帖

更多关于 五次函数什么时候学 的文章

 

随机推荐