zoukankan      html  css  js  c++  java
  • (Android)Activity生命周期详解(原创)

    1.先来张官方文档的生命周期图

    2.下面我们用代码解释Activity生命周期

    FirstActivity.java

    package mars.activity04;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class FirstActivity extends Activity implements OnClickListener{
        private Button btn1;
        private Button btn2;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.first);
            btn1 = (Button)findViewById(R.id.Btn1);
            btn2 = (Button)findViewById(R.id.Btn2);
            btn1.setOnClickListener(this);
            btn2.setOnClickListener(this);
            System.out.println("FirstAcvity-------------------------->onCreate");
        }
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            System.out.println("FirstAcvity-------------------------->onStart");
        }
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            System.out.println("FirstAcvity-------------------------->onResume");
        }
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            System.out.println("FirstAcvity-------------------------->onPause");
        }
        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
            System.out.println("FirstAcvity-------------------------->onStop");
        }
        @Override
        protected void onRestart() {
            // TODO Auto-generated method stub
            super.onRestart();
            System.out.println("FirstAcvity-------------------------->onRestart");
        }
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            System.out.println("FirstAcvity-------------------------->onDestroy");
        }
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.Btn1:
                Intent intent = new Intent();
                intent.setClass(this,SecondActivity.class);
                startActivity(intent);
                break;
            case R.id.Btn2:
                this.finish();
                System.out.println("FirstAcvityfinish-------------------------->");
                break;
            }
        }
    }

    SecondActivity.java

    public class SecondActivity extends Activity implements OnClickListener {
        private Button btn1;
        private Button btn2;
        private Button btn3;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.second);
            btn1 = (Button)findViewById(R.id.backbtn);
            btn2 = (Button)findViewById(R.id.thirdButton);
            btn3 = (Button)findViewById(R.id.finish2);
            btn1.setOnClickListener(this);
            btn2.setOnClickListener(this);
            btn3.setOnClickListener(this);
            System.out.println("SecondActivity-------------------------->onCreate");
            
        }
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            System.out.println("SecondAcvity-------------------------->onStart");
        }
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            System.out.println("SecondAcvity-------------------------->onResume");
        }
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            System.out.println("SecondAcvity-------------------------->onPause");
        }
        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
            System.out.println("SecondAcvity-------------------------->onStop");
        }
        @Override
        protected void onRestart() {
            // TODO Auto-generated method stub
            super.onRestart();
            System.out.println("SecondAcvity-------------------------->onRestart");
        }
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            System.out.println("SecondAcvity-------------------------->onDestroy");
        }
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.backbtn:
                Intent intent1 = new Intent();
                intent1.setClass(this,FirstActivity.class);
                startActivity(intent1);
                break;
            case R.id.thirdButton:
                Intent intent2 = new Intent();
                intent2.setClass(this,ThirdActivity.class);
                startActivity(intent2);
                break;
            case R.id.finish2:
                this.finish();
                System.out.println("SecondAcvityfinish-------------------------->");
                break;
            }
        }
    }

    ThirdActivity.java

    public class ThirdActivity extends Activity implements OnClickListener{
        private Button btn;
        private Button btn2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.third);
            btn=(Button)findViewById(R.id.backToSecondButton);
            btn2=(Button)findViewById(R.id.finish3);
            btn.setOnClickListener(this);
            btn2.setOnClickListener(this);
            System.out.println("ThirdAcvity-------------------------->onCreate");
        }
        @Override
        protected void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            System.out.println("ThirdAcvity-------------------------->onStart");
        }
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            System.out.println("ThirdAcvity-------------------------->onResume");
        }
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            System.out.println("ThirdAcvity-------------------------->onPause");
        }
        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
            System.out.println("ThirdAcvity-------------------------->onStop");
        }
        @Override
        protected void onRestart() {
            // TODO Auto-generated method stub
            super.onRestart();
            System.out.println("ThirdAcvity-------------------------->onRestart");
        }
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            System.out.println("ThirdAcvity-------------------------->onDestroy");
        }
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.backToSecondButton:
                Intent intent=new Intent();
                intent.setClass(this, SecondActivity.class);
                startActivity(intent);
                break;
            case R.id.finish3:
                this.finish();
                System.out.println("ThirdAcvityfinish-------------------------->");
                break;
            }
        }

    运行结果:

     

    启动程序FirstAcvity:
    FirstAcvity-------------------------->onCreate

    FirstAcvity-------------------------->onStart
    FirstAcvity-------------------------->onResume

    启动SecondAcvity:(注意onPause和onStop是分开的)
    FirstAcvity-------------------------->onPause
    SecondActivity----------------------->onCreate

    SecondAcvity------------------------->onStart

    SecondAcvity------------------------->onResume

    FirstAcvity-------------------------->onStop

    启动ThirdAcvity:(ThirdAcvity是Dialog类型的Activity)
    SecondAcvity------------------------->onPause

    ThirdAcvity-------------------------->onCreate
    ThirdAcvity-------------------------->onStart

    ThirdAcvity-------------------------->onResume

    返回SecondAcvity:(Intent就是Create Activity)
    ThirdAcvity-------------------------->onPause
    SecondAcvity------------------------->onStop

    SecondActivity----------------------->onCreate

    SecondAcvity------------------------->onStart
    SecondAcvity------------------------->onResume

    ThirdAcvity-------------------------->onStop

    返回FirstAcvity:
    SecondAcvity-------------------------->onPause

    FirstAcvity--------------------------->onCreate

    FirstAcvity--------------------------->onStart

    FirstAcvity--------------------------->onResume

    SecondAcvity-------------------------->onStop

    FirstAcvity下按home键:(正常的变得不可见)
    FirstAcvity--------------------------->onPause
    FirstAcvity--------------------------->onStop

    重新回到FirstAcvity:(正常的操控Activity)
    FirstAcvity--------------------------->onRestart
    FirstAcvity--------------------------->onStart
    FirstAcvity--------------------------->onResume

    ThirdAcvity下按home键:
    ThirdAcvity-------------------------->onPause
    SecondAcvity-------------------------->onStop
    ThirdAcvity-------------------------->onStop

    重新回到ThirdAcvity
    SecondAcvity-------------------------->onRestart

    SecondAcvity-------------------------->onStart

    ThirdAcvity-------------------------->onRestart

    ThirdAcvity-------------------------->onStart
    ThirdAcvity-------------------------->onResume

    FirstAcvity下熄屏:(相当于锁屏来到前端Another Activity,相当于FirstAcvity还可见)
    FirstAcvity-------------------------->onPause
    亮屏解锁到FirstAcvity:(返回)
    FirstAcvity-------------------------->onResume

    FirstAcvity下另一个app的Activity来到前端:(正常的变得不可见)

    FirstAcvity-------------------------->onPause
    FirstAcvity-------------------------->onStop

    回到FirstAcvity:(正常的操控Activity)
    FirstAcvity-------------------------->onRestart

    FirstAcvity-------------------------->onStart
    FirstAcvity-------------------------->onResume

    FirstAcvity中调用finish():

    FirstAcvityfinish-------------------------->
    FirstAcvity-------------------------->onPause

    FirstAcvity-------------------------->onStop

    FirstAcvity-------------------------->onDestroy

    SecondAcvity中调用finish():
    SecondAcvityfinish-------------------------->

    SecondAcvity-------------------------->onPause
    FirstAcvity-------------------------->onRestart
    FirstAcvity-------------------------->onStart

    FirstAcvity-------------------------->onResume

    SecondAcvity-------------------------->onStop

    SecondAcvity-------------------------->onDestroy

    ThirdAcvity中调用finish():
    ThirdAcvityfinish-------------------------->
    ThirdAcvity-------------------------->onPause

    SecondAcvity-------------------------->onResume

    ThirdAcvity-------------------------->onStop

    ThirdAcvity-------------------------->onDestroy

     关闭程序后重新启动FirstActivity:

    ...

    启动SecondActivity:

    ...

    启动ThirdActivity:

    ...

    按Back键,返回SecondActivity:

    ThirdAcvity-------------------------->onPause
    SecondAcvity-------------------------->onResume
    ThirdAcvity-------------------------->onStop
    ThirdAcvity-------------------------->onDestroy

    按Back键,返回FirstActivity:

    SecondAcvity-------------------------->onPause
    FirstAcvity-------------------------->onRestart
    FirstAcvity-------------------------->onStart
    FirstAcvity-------------------------->onResume
    SecondAcvity-------------------------->onStop
    SecondAcvity-------------------------->onDestroy

    按Back键,返回桌面:

     FirstAcvity-------------------------->onPause
    FirstAcvity-------------------------->onStop
    FirstAcvity-------------------------->onDestroy

    finish说明:对于finish,调用finish后,不会立即调用onDestroy,

    而是在执行完finish后的代码后调用onPause,onStop,onDestroy;

     4.Activity栈:

    ps:调用后create,所属Activity会进栈;调用了onDestroy,所属Activity会出栈;前端Activity总是在栈顶

    使用以下操作:

     启动1启动SecondActivity     ->     2返回一个Activity     ->     1finish->     2finish      ->     1finish

    栈情况:

    运行结果:

    1.启动 FirstAcvity:

     FirstAcvity-------------------------->onCreate
    FirstAcvity-------------------------->onStart 

    FirstAcvity-------------------------->onResume

    2.启动 SecondActivity:
    FirstAcvity-------------------------->onPause
     SecondActivity-------------------------->onCreate
     SecondAcvity-------------------------->onStart
     SecondAcvity-------------------------->onResume
     FirstAcvity-------------------------->onStop

    3.返回第一个Activity:
     SecondAcvity-------------------------->onPause
     FirstAcvity-------------------------->onCreate
     FirstAcvity-------------------------->onStart
     FirstAcvity-------------------------->onResume
    SecondAcvity-------------------------->onStop

     4.

     FirstAcvityfinish-------------------------->
     FirstAcvity-------------------------->onPause
     SecondAcvity-------------------------->onRestart
     SecondAcvity-------------------------->onStart
     SecondAcvity-------------------------->onResume
    FirstAcvity-------------------------->onStop
    FirstAcvity-------------------------->onDestroy

    5.
     SecondAcvityfinish-------------------------->
     SecondAcvity-------------------------->onPause
    FirstAcvity-------------------------->onRestart
     FirstAcvity-------------------------->onStart
     FirstAcvity-------------------------->onResume
     SecondAcvity-------------------------->onStop
     SecondAcvity-------------------------->onDestroy

    6.
     FirstAcvityfinish-------------------------->
     FirstAcvity-------------------------->onPause
    FirstAcvity-------------------------->onStop
     FirstAcvity-------------------------->onDestroy

    由以上知,转到某一个Activity,必然会调用onResume方法,故这个Activity的一些初始化工作一般放到onResume里面。

    现在Activity生命周期应该理解得差不多了,如有错误,欢迎指正。

  • 相关阅读:
    增加浏览数
    seo页面的分类:静态,伪静态,动态
    在页面设计中开始seo
    页面SEO中文章标题的优化技巧
    SEO中关于撰写页面标题的7个技巧转
    评 谷歌研发先进编程技术 简化Web应用开发
    转 苹果自家的 Web 服务器和开发语言用的是什么方案?
    转 微软平台生态圈已经改变
    微软的烂设计与苹果的优秀设计
    Win8探索之组件平台之路
  • 原文地址:https://www.cnblogs.com/android-for-dh/p/4472834.html
Copyright © 2011-2022 走看看