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

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 {@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界面。




如上图打印日志可以看出,创建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停止方法。

源代码如附件

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. [android] 保存文件到手机内存
  5. Android初级工程师面试题答案——Android题型
  6. Android—Http连接之GET/POST请求
  7. Android屏幕元素层次结构
  8. android 调用图库中选择的图片
  9. 测试你的Android应用程序

随机推荐

  1. Android(安卓)FileProvider配置报错andro
  2. Android(安卓)WebView获取cookie
  3. Android(安卓)JNI NDK Eclipse 设定(避免
  4. Android(安卓)动画 Activity切换动画
  5. Android中下载文件的使用
  6. Android(安卓)CTS 兼容性测试的Fail的一
  7. android异步加载图片
  8. android wifi 强度获得
  9. android发短信
  10. 【Android】Android开源项目精选(一)