原创内容,转载请注明出处

1、Activity生命周期

Activity翻译成中文表示活动、活跃。在Android中Activity表示的是与用户进行交互的界面,故而Activity是Android的一个重要组件,Android给它定义了它的生命周期,以便资源回收。以下是Activity的生命周期。


Android学习——Activity生命周期_第1张图片
如上图可以看出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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);System.out.println("-----mainActivity onCreate------");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();System.out.println("-----mainActivity onStart------");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();System.out.println("-----mainActivity onRestart------");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();System.out.println("-----mainActivity onResume------");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();System.out.println("-----mainActivity onPause------");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();System.out.println("-----mainActivity onStop------");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("-----mainActivity onDestroy------");}@Overridepublic 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;}@Overridepublic 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 {@Overrideprotected 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------");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();System.out.println("-----FirstActivity onStart------");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();System.out.println("-----FirstActivity onRestart------");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();System.out.println("-----FirstActivity onResume------");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();System.out.println("-----FirstActivity onPause------");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();System.out.println("-----FirstActivity onStop------");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("-----FirstActivity onDestroy------");}@Overridepublic 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;}@Overridepublic 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界面。


Android学习——Activity生命周期_第2张图片

如上图打印日志可以看出,创建MainActivity时,会依次调用MainActivity的onCreate、onStart、onResume方法。

2.点击send按钮时,跳转到FirstActivity界面。如下打印日志

Android学习——Activity生命周期_第3张图片

Android学习——Activity生命周期_第4张图片

如上打印日志可以看出从MainActivity跳转到FirstActivity时,首先会调用MainActivity的onPause;之后启动FirstActivity,依次调用FirstActivity的onCreate、onStart、onResume方法;最后由于调用MainActivity不可见,故而调用MainActivity的onStop方法来停止MainActivity(如果FirstActivity是对话框模式,即此时MainActivity依然可见,只是不可用,那么MainActivity不会调用onStop)。

3.点击返回按钮,从FirstActivity返回到MainActivity界面


Android学习——Activity生命周期_第5张图片

当从FirstActivity返回到MainActivity时,会先调用FirstActivity的onPause方法;之后重启MainActivity,异常调用onRestart、onStart、onResume方法;最后调用FirstActivity的onStop、onDestroy方法

4.修改AndroidManifest.xml,将FirstActivity变成对话框模式,增加配置如下


Android学习——Activity生命周期_第6张图片

则在MainActivity跳转到FirstActivity界面上时,结果如下。


Android学习——Activity生命周期_第7张图片


Android学习——Activity生命周期_第8张图片

如上可以看出由于FirstActivity是对话框模式,故而MainActivity在跳转到FirstActivity时,处于不可用状态,但依然可见,故而跳转过程中不会调用MainActivity的onStop停止方法。

源代码如附件

更多相关文章

  1. Android TextView加载html图片详解
  2. android 调用图库中选择的图片
  3. android 图片溢出问题2...[geoway]
  4. Android之ContextMenu的使用方法以及与OptionMenu的区别
  5. Android 摇一摇太灵敏的解决方法
  6. Android翻译:应用程序的生命周期 kill进程
  7. android:configChanges 横竖屏切换的生命周期
  8. Android加载Html的方法
  9. android window的requestWindowFeature()的使用方法

随机推荐

  1. Android(安卓)Studio Gradle 下载慢问题
  2. Android三种基本的加载网络图片方式
  3. android常用开源库volly下载
  4. App自动化解决方案 [开源项目] 基于Appiu
  5. Android(安卓)Animation之补间动画
  6. Android详细的对话框AlertDialog.Builder
  7. Android利用webView调用JavaScript
  8. Android(安卓)OTA升级(2):开启升级过程
  9. [Android]代码实现ColorStateList及State
  10. 学习Android开发,-----------配置环境,