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~~~");  
     }  
 }  

 

 

 

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

 

转载于:https://www.cnblogs.com/codeAnimal/p/3270814.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值