Activity的生命周期_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Activity的生命周期

Activity的生命周期

 2013/8/20 21:51:18  饿狼码农  博客园  我要评论(0)
  • 摘要:Activity生命周期解密生命有始有终,人生旅途中坦荡起伏总会有些不如意的时候,让我们来看Activity的生命始末~AndroidAPI官方文档:相信这张图,大家都不陌生。Activity有7个状态,彼此间相互转换~作为开发者,尤其是像我这种的菜鸟,我只需要关心其中的转折状态点即可。场景:应用启动后,状态执行顺序:onCreate()->onStart()->onResume关心的2种情况:1、back返回键正常流程,非常简单,依次执行,onPause()->onStop
  • 标签:Activity

Activity生命周期解密

生命有始有终,人生旅途中坦荡起伏总会有些不如意的时候,让我们来看Activity的生命始末~

Android API官方文档

 

  相信这张图,大家都不陌生。Activity有7个状态,彼此间相互转换~

作为开发者,尤其是像我这种的菜鸟,我只需要关心其中的转折状态点即可。

场景:应用启动后,状态执行顺序:onCreate()->onStart()->onResume

关心的2种情况:

1、back返回键

  正常流程,非常简单,依次执行,onPause()->onStop()->onDestory()

2、特别关注,home键。

      ——此键是用户操作最频繁的一个动作。所以,开发者必须处理好中间的状态转换。

   生活场景1: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,浏览器的Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁。

  当我们再次启动浏览器,看NBA新闻时,则浏览器先后又分别执行了onRestart()->onStart()->onResume()三个方法。

  生活场景2: 思考下,当再次启动浏览器的时候,生命周期是从onRestart()->onStart()->onResume()执行的啊,为什么还显示的是,之前浏览的那一页NBA信息呢? 理论上,应该是首页的NBA内容啊,因为重新运行onStart()->onResume()啊。这到底是为什么?

  原因:在按home键的时候,Activity执行了onPause()->onStop(),在onPause()中,程序保存了当前你浏览的NBA新闻的相关信息。当你再次启动浏览器的时候,在onRestart()中,重新加载了之前保存的NBA相关数据。所以,当你启动的时候,看到的是 按home键之前的NBA页面相关信息。

小Demo,供大家参考:

 

package com.tutor.activitydemo;  
 import android.app.Activity;  
 import android.os.Bundle;  
 import android.util.Log;  
 import android.widget.EditText;  
 public class ActivityDemo extends Activity {  
     private static final String TAG = "ActivityDemo";  
     private EditText mEditText;  
     //定义一个String 类型用来存取我们EditText输入的值  
     private String mString;  
     public void onCreate(Bundle savedInstanceState) {  
         super.onCreate(savedInstanceState);  
         setContentView(R.layout.main);  
         mEditText = (EditText)findViewById(R.id.editText);  
         Log.e(TAG, "start onCreate~~~");  
     }  
     @Override  
     protected void onStart() {  
         super.onStart();  
         Log.e(TAG, "start onStart~~~");  
     }  
     //当按HOME键时,然后再次启动应用时,我们要恢复先前状态  
     @Override  
     protected void onRestart() {  
         super.onRestart();  
         mEditText.setText(mString);  
         Log.e(TAG, "start onRestart~~~");  
     }   
     @Override  
     protected void onResume() {  
         super.onResume();  
         Log.e(TAG, "start onResume~~~");  
     }  
     //当我们按HOME键时,我在onPause方法里,将输入的值赋给mString  
     @Override  
     protected void onPause() {  
         super.onPause();  
         mString = mEditText.getText().toString();  
         Log.e(TAG, "start onPause~~~");  
     }   
     @Override  
     protected void onStop() {  
         super.onStop();  
         Log.e(TAG, "start onStop~~~");  
     }  
       
     @Override  
     protected void onDestroy() {  
         super.onDestroy();  
         Log.e(TAG, "start onDestroy~~~");  
     }  
 }  

 

 

 

  不知道,童鞋们明不明白呢? 菜鸟个人之见,如有错误之处,请留言提醒~

 

上一篇: Android常用的工具类【饿狼巨献】 下一篇: 没有下一篇了!
发表评论
用户名: 匿名