原创内容,转载请注明出处
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生命周期"这个主题深入探讨了Activity如何在应用程序中创建、运行、暂停、停止以及销毁的过程,这对于理解和优化应用性能至关重要。在这个例子程序中,开发者将有机会实践这些生命...
Android 四大组件——Activity——Activity 的生命周期 Android 四大组件中的 Activity 是一个非常重要的组件,它是用户与应用程序交互的入口。Activity 的生命周期是指从创建到销毁的整个过程,在这个过程中,...
本资料“安卓Android源码——(Activity生命周期).zip”着重探讨Activity从创建到销毁的各个阶段,以及在这些阶段中如何管理资源和响应用户或系统的事件。 Activity生命周期包含以下几个关键状态: 1. **初始状态**...
本资源“安卓Android源码——(Activity生命周期).rar”可能包含一系列关于Activity生命周期的讲解和示例代码,帮助开发者深入理解这一核心概念。 Activity生命周期主要包括以下几个关键状态: 1. **初始状态...
理解Activity的通信方式和生命周期变化是每个Android开发者必须掌握的基础知识。在本篇内容中,我们将深入探讨Activity之间的通信以及它们在不同操作下的生命周期变化,并讨论如何传递回传参数。 首先,我们来看...
总之,这篇文章深入浅出地介绍了Android应用开发中的重要概念,包括屏幕方向切换、全屏显示以及Activity生命周期管理。对于初学者来说,这些都是必须掌握的基础知识。通过实践和深入学习,开发者可以创建出更适应...
首先,我们来深入理解第六讲——Activity生命周期。Activity是Android应用程序的基本组件,它代表了用户可见且可与之交互的界面。生命周期包括了创建(onCreate())、启动(onStart())、显示(onResume())、暂停...
这篇博客"Android学习之路——4.Activity简介"很可能会详细解释Activity的基本概念、生命周期以及如何在实践中使用它。 Activity作为Android应用程序的一个窗口,它可以显示用户界面,并响应用户的交互。每个...
当我们谈论"动手学Android之二——初识Activity示例代码"时,这通常指的是一个简单的教程,旨在帮助初学者理解如何创建并运行第一个Android应用,从而开始他们的Android开发之旅。 在Android中,Activity是负责显示...
这些状态之间的转换是Activity生命周期的核心内容。 1. **创建(Created)**: 当Activity首次被创建时,会调用`onCreate()`方法。在这个阶段,开发者应初始化Activity的基本元素,如设置布局、数据绑定等。 2. **...
本篇学习笔记将深入探讨碎片的生命周期,这对于理解如何有效管理Android应用的用户界面至关重要。 碎片的生命周期与Activity的生命周期紧密关联,但它们之间存在着一些差异。首先,让我们来看看一个Fragment的基本...
一、Activity生命周期 1. Activity有七个关键状态:初始化(Created)、可见(Started)、运行(Resumed)、暂停(Paused)、停止(Stopped)、销毁(Destroyed)以及重新创建(Restarted)。理解这些状态对于正确...
Android系统通过栈来管理Activity的生命周期,当用户启动一个新Activity时,新的Activity会被压入栈顶,而当前Activity则被压入栈底。在用户操作或者系统资源紧张时,Activity会经历一系列的生命周期回调,如...
在这里,你将看到`onCreate`方法,这是每个Android应用生命周期的起点。在这个方法内,通常会设置布局视图,并执行其他初始化操作。 布局文件,通常位于`res/layout`目录下,如`activity_main.xml`。这是一个XML...
通过深入研究"安卓Android源码——模拟Activity进出栈.zip"中的内容,开发者可以更好地掌握Android系统如何处理Activity的生命周期和任务切换,从而编写出更符合用户习惯和系统性能的应用程序。对于进阶开发者来说,...
当我们谈论"模拟Activity进出栈"时,实际上是指在Android应用中如何管理和控制Activity的生命周期,以及它们在任务堆栈(Task Stack)中的行为。这个主题涉及到Android应用的基本架构和流程控制,对于理解和优化应用...
这个源码提供了实际应用实例,展示了如何构建一个完整的Android项目,包括项目结构、资源管理、Activity生命周期等基础知识。 2. **游戏框架**:游戏可能采用了某种游戏框架,如Unity、Cocos2d-x或者自定义的游戏...