原创内容,转载请注明出处
1、Activity生命周期
Activity翻译成中文表示活动、活跃。在Android中Activity表示的是与用户进行交互的界面,故而Activity是Android的一个重要组件,Android给它定义了它的生命周期,以便资源回收。以下是Activity的生命周期。
如上图可以看出Activity的生命周期可分onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()、onDestroy()七个阶段。
onCreate方法:Activity第一次被创建时调用,通常在该方法中创建视图,绑定监听器。
onStart方法:Activity将要在前台可见的时候调用,如果之后前台可见,调用onResume,如果不可见调用onStop。
onResume方法:Activity在前台可见,正与用户交互。
onPause方法:当一个新的Activity被创建启动时,使得原本的Activity不可用,则调用该暂停方法。之后如果被唤醒,则调用onResume,如果不可见,则调用onStop停止方法。
onStop方法:当一个新的Activity被创建启动时,使得原本的Activity不可见,则调用该停止方法。之后如果被唤醒,则调用onRestart方法重启Activity。
onRestart方法:当一个Acrivity从停止状态被唤醒时,则调用重启方法。比如调用返回键。
onDestroy方法:Activity手动调用finish方法或者被系统要求资源回收时,调用该方法。
当系统资源不足,系统会进行资源回收,会把处于onStop、onRestart、onDestroy状态的Activity进行回收。
2、Task任务栈
当多个Activity运行时,一般只会有一个Activity和用户进行交互,Android将这些Activity保存在一个任务栈中(栈采用先进后出),Android应用程序每次显示的Activity都处于栈顶的位置。当用户按下返回键时,会将栈顶上的Activity弹出(即当前Activity进入onDestroy状态),显示下一个Activity(即弹出后栈顶上的Activity)。
关于栈的学习可以搜索相关资料,主要的特性是先进后出,后进先出。
3、案例测试
拿上个例子(Acrivity之间跳转)进行修改,让MainActivity和FirstActivity都实现这7个方法,并且打印相关信息。
修改后MainActivity类代码如下
package com.cygoat.myapp; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("-----mainActivity onCreate------"); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); System.out.println("-----mainActivity onStart------"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); System.out.println("-----mainActivity onRestart------"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); System.out.println("-----mainActivity onResume------"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); System.out.println("-----mainActivity onPause------"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); System.out.println("-----mainActivity onStop------"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("-----mainActivity onDestroy------"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void sendMessage(View view){ Intent intent = new Intent(this,FirstActivity.class); EditText text = (EditText) findViewById(R.id.message); intent.putExtra("message", text.getText().toString()); startActivity(intent); } }
FirstActivity代码如下
package com.cygoat.myapp; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); Intent intent = getIntent(); String message = intent.getStringExtra("message"); TextView textView = (TextView) findViewById(R.id.result); textView.setText("内容为:"+message); System.out.println("-----FirstActivity onCreate------"); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); System.out.println("-----FirstActivity onStart------"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); System.out.println("-----FirstActivity onRestart------"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); System.out.println("-----FirstActivity onResume------"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); System.out.println("-----FirstActivity onPause------"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); System.out.println("-----FirstActivity onStop------"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("-----FirstActivity onDestroy------"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.first, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
1.进入应用程序时,首先进入MainActivity界面。
如上图打印日志可以看出,创建MainActivity时,会依次调用MainActivity的onCreate、onStart、onResume方法。
2.点击send按钮时,跳转到FirstActivity界面。如下打印日志
如上打印日志可以看出从MainActivity跳转到FirstActivity时,首先会调用MainActivity的onPause;之后启动FirstActivity,依次调用FirstActivity的onCreate、onStart、onResume方法;最后由于调用MainActivity不可见,故而调用MainActivity的onStop方法来停止MainActivity(如果FirstActivity是对话框模式,即此时MainActivity依然可见,只是不可用,那么MainActivity不会调用onStop)。
3.点击返回按钮,从FirstActivity返回到MainActivity界面
当从FirstActivity返回到MainActivity时,会先调用FirstActivity的onPause方法;之后重启MainActivity,异常调用onRestart、onStart、onResume方法;最后调用FirstActivity的onStop、onDestroy方法
4.修改AndroidManifest.xml,将FirstActivity变成对话框模式,增加配置如下
则在MainActivity跳转到FirstActivity界面上时,结果如下。
如上可以看出由于FirstActivity是对话框模式,故而MainActivity在跳转到FirstActivity时,处于不可用状态,但依然可见,故而跳转过程中不会调用MainActivity的onStop停止方法。
源代码如附件
相关推荐
动手学Android之七——Activity生命周期例子程序,欢迎大家下载
Android四大组件——Activity——Activity的生命周期.doc
安卓Android源码——(Activity生命周期).zip
安卓Android源码——(Activity生命周期).rar
Activity之间通信及其生命周期变化,及回传参数等基础知识点
1、设计界面,包括四个按钮,两个文本框。单击对应按钮可以启动对应...假定Activity A为启动Activity。 2、修改 Activity 的启动模式 LaunchMode,并通过 Log 信息来体会不同启动模式所对应的Activity 和 task 的关系
Android 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容 第6章 Android组件之间的信使Intent Android 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和...
3.5.2 Activity生命周期 3.6 Intent简介 3.6.1 Intent属性与过滤器 3.6.2 Intent启动系统Activity 3.7 小结 练习 第4章 视图组件 4.1 视图组件的使用模式 4.1.1 视图组件的定义 4.1.2 资源的访问 ...
Android——Fragment的静态注册和动态注册 为了实现从Fragment跳转到其他Activity,下面需要创建以下文件: 第一步:简单编写布局文件fragment_activity.xml和抽象类TemplateFragmentActivity.java代码如下: ...
1.2.6Activity生命周期 1.3Android基本控件 …… 第2章“天天向上”——桌面小插件与数据库存储的学习 第3章“NotePad”——界面运用与数据处理 第4章“SpinLock”——画图与替代解锁界面的尝试 第5章“BlueControl...
10.3 Service的生命周期 10.4 实例学习Service 10.4.1 精彩实例一——定时提醒 10.4.2 精彩实例二——音乐播放器 10.5 本章小结 第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划...
10.3 service的生命周期 194 10.4 实例学习service 194 10.4.1 精彩实例一——定时提醒 194 10.4.2 精彩实例二——音乐播放器 198 10.5 本章小结 201 第11章 循序渐进——开发android应用的基本步骤...
10.3 Service的生命周期 10.4 实例学习Service 10.4.1 精彩实例一——定时提醒 10.4.2 精彩实例二——音乐播放器 10.5 本章小结 第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划...
书名:《Android编程入门...8.1.2 Activity的生命周期 …… 第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器
Activity生命周期 17 调用父类 18 服务生命周期 21 广播接收器生命周期 22 进程与生命周期 22 用户界面User Interface 24 视图层次View Hierarchy 24 布局Layout 25 部件Widgets 26 用户界面事件UI Events 26 菜单...
书名:《Android编程入门...8.1.2 Activity的生命周期 …… 第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器