zoukankan      html  css  js  c++  java
  • android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了。

    趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征

    什么是生命周期

      在还没有接触android开发的时候,听到有人说Activity生命周期的时候,觉得这是一个很专业很深奥的东西。

    但是在了解过之后,原来并不是那么一回事,这个Activity生命周期其实是很基础的东西,明白他们的原理对我们以后开发

    编写优秀程序有很大帮助。

      生命周期其实就是一个东西从出生到消亡的这段时间,那么Activity生命周期又是怎么一回事呢?

    我们先借用官方的一张图说明一下,看下面的图。

    从图中可见,在Activity的生命周期中,在不同的阶段都由不同他的函数控制它们的行为。当然这个行为可以由用户自己决定。

    我们先不看图片左边的箭头,我们看的是图片中间和右边的部分。

    周期第一阶段:活定阶段,即从lanucned到running阶段。

    特征:处于窗口最前端,整个Activity都可以被用户看见

    函数执行顺序:onCreate()->onStart()->onResume()

    为了证明这些函数是确确实实被执行的,我们编写以下代码:

     1 package com.aidevelops.activitys;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.util.Log;
     6 
     7 public class MainActivity extends Activity {
     8 
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12         setContentView(R.layout.activity_main);
    13         Log.d("Active", "onCreate method started");
    14     }
    15 
    16     @Override
    17     protected void onResume() {
    18         super.onResume();
    19         Log.d("Active", "onResume method started");
    20     }
    21 
    22     @Override
    23     protected void onStart() {
    24         super.onStart();
    25         Log.d("Active", "onStart method started");
    26     }
    27     
    28     
    29     
    30 }
    View Code

     Log.d(tag, message)函数用于将指定tag的message打印到logcat控制台

    我们可以将tag理解为一个分类

    运行程序后打开LogCat窗口,创建一个条件过滤器

    如图:

      

    点击绿色的+号后弹出一个窗口:

      

    注意Log.d()函数的第一个参数就是by log Tag中的Tag,第二个参数是要打印到LogCat控制台的信息

    填好后点击OK。接着点刚才创建的LiifeCycle过滤器,就能看到下图的信息:

    我们可以看到,每个函数都按顺序执行了。

    第二阶段:暂停阶段

    特征:Activity被部分遮挡。例如被半透明的窗口遮挡。

      涉及的函数:onPause()、onResume()

    第三阶段:停止阶段

    特征:Activity完全被遮挡,例如打开了一个新的Activity。

      涉及的函数:onPause()、onStop()

    当用户导航回到之前停止的Activity的时候,就会触发已经停止的Activity重新启动。

      涉及的函数:onRestart()->onStart()->onResume()

    如图:

    onPause和onStop是我们启动另一个Activity的时候触发的

    而onRestart,onStart,onResume是我们点击后退键的时候触发的

    大家有兴趣的可以自己写代码测试。只需要像上面的代码一样,覆盖相应的声明周期函数,填入你想测试的代码就可以了。

    贴上完整代码:

     1 package com.aidevelops.activitys;
     2 
     3 import android.app.Activity;
     4 import android.content.Intent;
     5 import android.os.Bundle;
     6 import android.util.Log;
     7 import android.view.View;
     8 
     9 public class MainActivity extends Activity {
    10 
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate(savedInstanceState);
    14         setContentView(R.layout.activity_main);
    15         Log.d("Active", "onCreate method started");
    16     }
    17 
    18     @Override
    19     protected void onResume() {
    20         super.onResume();
    21         Log.d("Active", "onResume method started");
    22     }
    23 
    24     @Override
    25     protected void onStart() {
    26         super.onStart();
    27         Log.d("Active", "onStart method started");
    28     }
    29 
    30     @Override
    31     protected void onPause() {
    32         super.onPause();
    33         Log.d("Active", "onPause method started");
    34     }
    35 
    36     @Override
    37     protected void onRestart() {
    38         super.onRestart();
    39         Log.d("Active", "onRestart method started");
    40     }
    41 
    42     @Override
    43     protected void onStop() {
    44         super.onStop();
    45         Log.d("Active", "onStop method started");
    46     }
    47 
    48     public void onClickStartActivity(View view)
    49     {
    50         Intent intent = new Intent(this, TargetActivity.class);
    51         startActivity(intent);
    52     }
    53     
    54 }
    View Code

    那么知道这些东西对我们有什么作用,我们后面继续讲,因为博主已经累了,呵呵,大家都早点睡吧,早睡早起身体好,:-)

  • 相关阅读:
    [ilink32 Error] Error: Unresolved external 'SendARP'
    delphi IDE RAD 丢失的快捷键 Ctrl+Shift+F
    [ilink32 Error] Error: Unresolved external '__fastcall Data::Win::Adodb::TCustomADODataSet
    [ilink32 Error] Fatal: Unable to open file 'RM_COMMON.OBJ'
    oracle如何删除表空间
    oracle创建表空间
    oracle的日期相减
    RSA加密工具类(非对称加密算法)
    AES加密工具类(对称加密算法)
    jfinal如何查看post还是get请求?
  • 原文地址:https://www.cnblogs.com/ai-developers/p/android_activity_lifecycle.html
Copyright © 2011-2022 走看看