zoukankan      html  css  js  c++  java
  • Android四大组件--活动(Activity)

    1. 概念

    说明:

    1). 创建和销毁 onCreate 和 onDestory

    应用场景:当界面销毁的时候存储一些数据,在onCreate创建的时候回显数据;

    例如:发短信:写短信写到一半,按home键退出不发送这个时候进入onDestory,保存未发送的短信,然后再进入短信在onCreate中把之前保存的信息读取出来,就可以看到未发送的短信显示出来

    2). 可见和不可见 onStart 和 onStop

    注意:如果一个界面被最小化了,那么是不会调用onDestory方法的。仅仅是调用了onStop方法

    应用场景:当界面不可见的时候,进入onStop,当界面可见的时候,进入onStart

    例如:正在看视频,这个时候来了一个电话,视频被打断(这个时候进入onStop,用来暂停视频播放),挂断电话,视频界面重新回来了(这个时候进入onStart,再次启动视频播放),继续视频播放。

    3). 获取焦点和失去焦点 onResume 和 onPause

    注意, 如果一个界面还能看得见,但是失去了焦点,那么它的生命周期只会调用onPause.不会调用onStop

    应用场景 : 一般用作游戏的暂停,在游戏的界面上覆盖住一个透明的界面,那下面的界面能看到,但是不可交互。


    生命周期的总结

    完整的生命周期

    onCreate--onStart--- onResume---onPause--onStop---onDestory

    可视生命周期

    onStart--onResume--onPause--onStop

    前台生命周期

    onResume--onPause

    2. 代码

    public class MainActivity extends AppCompatActivity {
    
        //创建:无界面
        @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 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("onDestroy");
        }
    }

    现象:

    点击进入时:

    3. 四种启动模式

    一般我们就使用默认的,最多再使用单一顶部模式;

    1. standard -标准模式,默认的启动模式
    只要这个界面被启动多少次就会产生多少个实例被压到栈里面。

    2. singleTop- 单一顶部模式

    如果哪一个activity设置了这种模式,但凡它位于栈顶,也就是显示在屏幕上给用户,如果还想启动它,是不会再创建新的实例了。还是使用栈顶的这个实例。

    应用场景:为了避免自己启动自己,出现一些奇怪的现象。---短信编写界面


    3. singleTask---单一任务模式

    如果哪一个activity设置了这种启动模式,假设以前已经在栈中存在过实例,那么接下来将不会再次创建它的实例,而是把以前的实例直接移动到栈顶显示,并且把它与栈顶之间的实例全部销毁。

    应用场景:如果哪一个界面非常的消耗内存和CPU,一般做成singleTask启动模式 :浏览器界面

    4. singleInstance ---全局唯一模式(单例模式)

    如果哪一个activity设置了这种启动模式,那么它创建出来的实例会单独存放在一个栈中,并且这个栈有且只能有它自己一个实例对象,如果以后还要启动这个activity,那么要做的仅仅是交替显示不同的栈而已。

    4. 横竖屏切换

    1. 直接硬编码当前界面显示的是横屏还是竖屏

    android:screenOrientation="portrait/landscape"

    2.  根据手机方向不同而显示不同的画面

    android:configChanges="keyboardHidden|screenSize|orientation"

  • 相关阅读:
    【CF1416D】Graph and Queries(虚点)
    【CF1120D】Power Tree(建图,差分,最小生成树)
    AtCoder Regular Contest 121
    [2021.5] 我要交作业!
    [校内训练2021_03_03]C
    [校内训练2021_03_02]C
    [经验与教训2021_03_01-2021_03_05]
    [校内训练2021_02_24]B,代数数的和仍然是代数数
    [校内训练2021_02_25]C
    [经验与教训2021_02_19-2021_02_26]
  • 原文地址:https://www.cnblogs.com/maogefff/p/7805718.html
Copyright © 2011-2022 走看看