zoukankan      html  css  js  c++  java
  • android ——活动的生命周期

    在其生命周期内,activity在运行、暂停和停止三种可能的状态间进行转换,不同状态之间互相转换的时候的调用不同的方法,重写这些方法就能在活动切换,被销毁时保存或传输数据,在被启动、被切换出来时接收数据。或是完成其他一些工作。

    然后是一个简单的demo,拥有两个活动,主活动中有一个启动第二个活动的按钮,第二个活动中有返回第一个很活动的按钮。

    public class MainActivity extends AppCompatActivity {
    
        // 在完整生存期开始时调用
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);//加载布局
            Log.d("MainActivity","onCreate");
            Button button1 = (Button) findViewById(R.id.button1);
            Button button2 = (Button) findViewById(R.id.button2);
    
            //启动第二个活动
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    startActivity(intent);
                }
            });
    
            //销毁当前活动
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    finish();
                }
            });
        }
    
        //由不可见转换为可见时调用
        @Override
        protected void onStart() {
            super.onStart();
            Log.d("MainActivity","onStart()");
        }
    
        //由可见转换为不可见时调用
        @Override
        protected void onStop() {
            super.onStop();
            Log.d("MainActivity","onStop()");
        }
    
        //离开前台,但不是完全不可见
        @Override
        protected void onPause() {
            super.onPause();
            Log.d("MainActivity","onPause()");
        }
    
        //返回前台,准备好和用户交易
        @Override
        protected void onResume() {
            super.onResume();
            Log.d("MainActivity","onResume()");
        }
    
        //重启处于停止状态的活动时对用
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.d("MainActivity","onRestart()");
        }
    
        // 在完整生存期结束时调用
        @Override
        protected void onDestroy() {
            // 清空所有的资源,包括结束线程、关闭数据库连接等。
            super.onDestroy();
            Log.d("MainActivity","onDestroy");
        }
    }

    每个方法中都会有一个该方法名字的打印。

    首先是第一次启动活动,

    先出现了onCreate onStart、onResume(创建->启动->运行)方法

    点击按钮启动第二个活动

    点击第二个活动的按钮,启动第一个活动

    点击销毁按钮,调用finish方法销毁第一个活动

    这时第二个活动会被打开,也就是说活动再相互被启动的时候,不会被销毁,onDestory()不会被调用,这时点击返回,

    由会启动第一个活动,然后并没有调用onCreate()方法,这就说明刚刚销毁的活动不是这个活动,回想一下刚刚的整体过程就是,一开始打开启动的MainActivity启动了SecondActivity,然后SecondActivity通过Intent启动的MainActivity和刚开始那个MainActivity并不是同一个,当SecondActivity通过Intent启动的MainActivity的时候,栈中一共有三个活动,该开始启动的MainActivity和SecondActivity处在停止状态,MainActivity处于栈底,所以销毁掉栈顶的MainActivity后SecondActivity就被重启。

    销毁栈顶的MainActivity,在SecondActivity点击返回后,打开了最开始的MainActivity,这时点击home键回到桌面

    这里可以看到,只有是活动变得完全不可见,无论是启动了其他活动,还是返回桌面都会出现onPause、onStop(暂停->停止)方法。

  • 相关阅读:
    codeforces 169 div2 C
    poj 1062(最短路)
    sgu 118
    sgu 101
    poj 2446二分图匹配
    ural 1129 (求数据)
    C#中抽象类和接口的区别(转)
    在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
    一道爱出的题目,就是前面两个数相加 用递归方法实现
    C#冒泡排序
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/7515024.html
Copyright © 2011-2022 走看看