简析Activity生命周期

发布时间:2020-03-24 18:28:59 作者:Cindere_liuqiqi
来源:网络 阅读:550

   Activity和所有的生物一样,也有生老病死这一说,这就是我们将要了解的Activity生命周期的概念。

   一:生命周期

   Activity的生命周期如下图所示:


简析Activity生命周期

   Activity的生命周期分为四个阶段

   (1)运行态:

   应用程序启动之后,若Activity处于屏幕的最前端,可以与用户进行交互的界面,我们说其具有运行态。一个Activity从创建到运行态,需要经历onCreate-->onStart-->onResume三个阶段

   (2)暂停态:

   Activity被置于后台,但是用户仍然可见,失去焦点,只是暂时不能进行交互,调用onPause()进入暂停态。进入暂停态的Activity,若想重新回到运行态,需要调用onResume()方法

   (3)停止态:

   Activity被置于后台,完全被其他Activity挡住,失去焦点,不能交互,调用onStop()进入停止态。若想重新回到运行态,需经过onRestart()-->onStart()-->onResume()三个阶段,此时应注意实行onRestart方法之后程序进入到的是onStart而不是onCreate。也就是说:onCreate()方法,只被执行一次,onResume()无论在什么状态均需要执行,onStart()旨在创建和onestart()之后执行一次。

   (4)终止态:

   Activity被终止,比如点击“返回”键之后,将结束程序的执行,调用onDestory()方法,进入到终止态。若想重新回到运行态,需重新定义Activity。

   二:作用

   清晰的区分Activity的生命周期,在以后的编程操作中,我们可以清晰的知道哪些操作应该在哪些状态下运行。比如某功能,要求用户第一次登陆时要注册,在此登陆的时候则直接跳入,这样的功能我们应该在onCreate方法中是实现,因为onCreate在应用程序的执行中,只运行一次。

   三:生命周期的调用时机

   1:调用时机

    这六个方法,不需要用户手动调用,由系统自动调用。然而不同的方法调用的时机却不相同。

   测试方法:创建工程,在主界面中,重写六个方法,添加输出语句,执行程序,按上述几种状态,分别测试程序,看后台输出即可验证结果。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("onCreate");
    }
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("onStart");
    }
    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("onResume");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("onRestart");
    }
    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("onPause");
    }
    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("onStop");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("onDestory");
    }
}

   测试结果:  

     ①程Activity动,自动依次进入onCreate-->onStart-->onResume三个状态

     ②按home键,Activity全被挡住,依次进入到onPause-->onStop两个状态

     ③按返回键,终止程序执行,依次进入到onPause-->onStop-->onDestory状态

     ④长按home键,重新执行程序,依次进入到onRestart-->onStart-->onResume三个状态

 2: 思考

   单击A页面按钮实现从页面A到页面B的跳转,此时两个Activity处于生命周期的什么状态下呢?

   解决办法:

  (1) 创建工程,编写自定义Act2,在Act2中添加如上代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act2);
    System.out.println("2----onCreate");
}
@Override
protected void onStart() {
    super.onStart();
    System.out.println("2----onStart");
}
@Override
protected void onResume() {
    super.onResume();
    System.out.println("2----onResume");
}
@Override
protected void onRestart() {
    super.onRestart();
    System.out.println("2----onRestart");
}
@Override
protected void onPause() {
    super.onPause();
    System.out.println("2----onPause");
}
@Override
protected void onStop() {
    super.onStop();
    System.out.println("2----onStop");
}
@Override
protected void onDestroy() {
    super.onDestroy();
    System.out.println("2----onDestory");
}

   (2)在主界面上,添加跳转的实现及其他生命周期方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    System.out.println("1----onCreate");
    findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
                                                   
        @Override
        public void onClick(View arg0) {
            Intent i = new Intent(MainActivity.this,Act2.class);
            startActivity(i);              
        }
    });
}
@Override
protected void onStart() {
    super.onStart();
    System.out.println("1----onStart");
}
@Override
protected void onResume() {
    super.onResume();
    System.out.println("1----onResume");
}
@Override
protected void onRestart() {
    super.onRestart();
    System.out.println("1----onRestart");
}
@Override
protected void onPause() {
    super.onPause();
    System.out.println("1----onPause");
}
@Override
protected void onStop() {
    super.onStop();
    System.out.println("1----onStop");
}
@Override
protected void onDestroy() {
    super.onDestroy();
    System.out.println("1----onDestory");
}

   (3)运行工程,点击按钮,观看控制台,结果如下:

08-20 13:46:26.842: I/System.out(279): 1----onPause
08-20 13:46:26.875: I/System.out(279): 2----onCreate
08-20 13:46:26.875: I/System.out(279): 2----onStart
08-20 13:46:26.875: I/System.out(279): 2----onResume
08-20 13:46:27.212: I/System.out(279): 1----onStop

  答案:由于此时A界面正在被B界面覆盖,所以A界面先进入到onpause状态,随后B界面启动,进入onCreate-->onStart-->onResume三个状态,之后A界面被完全挡住,A界面到达onStop状态。

   Activity生命周期十分重要,要重点掌握,以后我们会经常用到的,注意产生时机与作用,注意区别哦。。简析Activity生命周期


推荐阅读:
  1. mycat功能测试简析
  2. HBase Client API 简析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

activity生命周期 ct ty

上一篇:如果根据日志去禁用user_agent

下一篇:maven的聚合模块和pom继承使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》