Android中的Activity生命周期

 

       说到生命周期,对于程序员来说并不陌生。如果学过Servlet的朋友,就更不会陌生了饿,其实差不多,android的生命周期与Servlet的生命周期有相似之处 。

            Android的生命周期通常是有这样几个方法构成:onCreate()onStart()onPause()onResume()onStop()onDestroy()onRestart()等七个。也许大家还不清楚我们为什么要知道android的生命周期,也许大家这么认为,我管它是什么,我知道每次写Activity时总是在onCreate()中,最终也能把我的程序运行出来。这样认为也不错,但是要想在这android行业里深入发展的,我相信,只要是程序员,他肯定是先把生命周期弄清楚才吃得下饭,睡得安稳。

       Android手机是2010年开始火爆上市,因为它的炫,很快成了手机行业的老大,又因为是基于在java语言上开发的,当然啦,我这么说是不对的,了解android的朋友都是知道的,我说的只是android的顶层应用层,而下面还有基于Linux的内核层、系统运行层即我们所说的CC++库和Android运行库等构成。

      从事java开发的朋友对查API文档来说是再熟悉不过了,android开发也同样离不开查看API文档。我说说我自己的经历吧,当初我刚开始学java语言的时候,什么也不懂,老师说什么面向对象,我觉得与C语言没有多大的区别呀,总是以为也是面向过程的,学到后面才知道,我们为什么说java面向对象的。那是一次面试题目,写出排序的方法,我那时基础也不好,就用面向过程来完成,回来和朋友交流的时候,朋友说了让我很惊呀,啊?这么简单你还弄得那么复杂我就纳闷啦,为什么啊?结果他告诉我,你去查查API文档的Collections类,下面应该有个sort()方法吧。我回去一查,呀,这么简单啊,让我自己弄的那么复杂,真不该啊。好啦,从那以后,让我弄清楚了面向对象和如何查API文档了。为什么说是面向对象呢?是因为你只要调用Collections.sort()方法就解决如何排序问题,而面向过程是需要自己写出每一步实现的过程;java里涵盖的类实在是太多太多了,我相信就连发现java的人都不会全部记得的,这时就需要查API文档了,如何查呢?只要模糊的知道某个类,就在该类下搜索,看看方法名、参数以及返回的对象,先地位再细看。就这么的简单。我希望大家不要去死记那些类,合理查API,一样是关羽,一样能过五关斩六将。

      说了这么多的废话,大家也不耐烦了。下面我就用我自己所理解的方法给大家展示一下吧。

      首先我创建第一个MainActivity类。

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG, "onCreate()");
       
        Button button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    startActivity(intent);
   }
  });
       
        Button threebutton = (Button) this.findViewById(R.id.threebutton);
        threebutton.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, ThreeActivity.class);
    startActivity(intent);
   }
  });
    }

 @Override
 protected void onDestroy() {
  Log.i(TAG, "onDestroy()");
  super.onDestroy();
 }

 @Override
 protected void onPause() {
   Log.i(TAG, "onPause()");
  super.onPause();
 }

 @Override
 protected void onRestart() {
   Log.i(TAG, "onRestart()");
  super.onRestart();
 }

 @Override
 protected void onResume() {
   Log.i(TAG, "onResume()");
  super.onResume();
 }

 @Override
 protected void onStart() {
   Log.i(TAG, "onStart()");
  super.onStart();
 }

 @Override
 protected void onStop() {
   Log.i(TAG, "onStop()");
  super.onStop();
 }
   
}

 

其次,创建OtherActivity类,其代码如下:

public class OtherActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.other);
 }

}

最后,再创建ThreeActivity 

public class ThreeActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.three);
 }
}

运行结果给大家看一下:

当然,我并不是让大家看运行后的界面,而是绕过大家看下后台的数据哦。

先来一步一步操作下,运行下android application,打开Logcat窗口(Window下的Show ViewOther...)如下图2个步骤:

1.

 2.

OK吧。

在状态栏看到下图标志的了吧。点击绿色的标志吧。

出现下图的

       我在Filter Name一栏输入MainActivity的字符串,在by Log Tag也输入"MainActivity"字符串,点击OK

       我们看到了第一个运行是onCreate()方法,第二个是onStart()方法,第三个是onResume()方法。这是第一次运行MainActivity类。

       当我点击按钮后,看下界面显示吧:

      再来看下后台打印的数据啊:

     前三个是刚才运行后的数据,第四条,是在我点击,从MainActivity调转到OtherActivity了,会执行OnPause()方法。接下来我返回到MainActivity界面中,看看又有什么变化:

      

 是不是有第五条数据啦,这时事调用了OnResume()方法了。

 

       我再来点击 ,看下前台界面有什么变化:

再来看下后台数据吧:

       这时又多出了2条数据了,分别是onPause()onStop()方法。当从MainActivity跳转到ThreeActivity类时,分别执行了onPause()onStop()方法。再来返回到MainActivity类。看看后台数据有没有变化:

       哇,看看打印出来的时间,就知道了,执行了三个方法,分别是onRestart()onStart()onResume()

最后退出该程序吧,看看后台的数据吧:

  

打印了onDestroy()方法了,这时是销毁了。

 

好了,整个过程,我们也都看到了,我只是没有清除打印台,大家不要误解,我担心某些人错认为都是一次性执行的结果。

 

总结一下吧:

第一次执行该程序时:onCreate()-->onStart()-->onResume()跳转到OtherActivity类时执行了onPause()再从OtherActivity类返回到MainActivity类时执行了onResume()再跳转到ThreeActivity类时执行了onPause()onStop()再从ThreeActivity返回到MainActivity类时执行了onRestart()-->onStart()-->onResume()最后退出该程序时,执行了onDestroy()

 

进一步的总结:

onCreate()是程序启动时就执行,一旦执行就不会在执行了,除非是销毁了才会执行;一旦离开Activity(无论是何Activity)时就会执行onPause()当又回到原始的那个类时,执行的是onResume()其他的一目了然了。

 

好了,到这里了,应该理解了吧!

 

欢迎多来指点交流!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值