Android四大组件之Activity

    xiaoxiao2021-12-02  19

    Activity是一个应用程序中的界面,承担着与用户交互的角色。在说Activity之前有必要先介绍一下Intent。

    1. 关于Intent(意图)

    Intent是连接四大组件的纽带,分为显示意图和隐式意图.

        显式意图:

    在代码里面用intent设置要开启Activity的字节码 。应用场景: 自己应用程序开启自己的界面 推荐使用显示意图。效率很高。

       隐式意图:

    在代码里面设置intent的action和data,框架通过解析清单文件找到Activity然后开启 应用常见:开启别人应用程序的界面 隐式意图。 自己的某个界面,想让别的应用程序开启。

     

     如何写显示意图:

    Intent intent =new Intent();

      intent.setClass(this,FirstActivity.class);

    //   intent.setClassName(this,"com.itheima.twointent.FirstActivity");

    //    intent.setClassName(getPackageName(),"com.itheima.twointent.FirstActivity");

          startActivity(intent);

     

     如何写隐式意图:

    Intent intent =new Intent();

     intent.setAction("com.itheima.open02");

    // 红色的可以写, 也可以不写. 不写就会是默认的值

    //  intent.addCategory("android.intent.category.DEFAULT");

    //   intent.addCategory(Intent.CATEGORY_DEFAULT);

          intent.setData(Uri.parse("haha://"));

             startActivity(intent);

    需要在 清单文件中去注册声明组件的时候就去 配置 隐式意图.

     <!-- 注意:一般在写一个activity 的时候, 如果是设置隐式意图

         激活,通常都需要加上category,这个大家就 强制一下...-->

            <activity android:name="com.lulu.twointent.SecondActivity">

                <intent-filter>

                    <action android:name="com.lulu.open02"/>

                    <!-- 这个比较 特殊 , 一般配置隐式意图 的时候就需要写. 表示的  用在默认的设备中 (默认的运行在 手机中的). -->

                    <!-- <categoryandroid:name="android.intent.category.DEFAULT"/> -->

                    <data android:scheme="haha"/>

                </intent-filter>

            </activity>

    2. Activity的生命周期

    生命周期的分类:

        entire lifetime完整生命周期

       oncreate()-->onstart()-->onResume()->onpause-->onStop()-->onDestory();

        visible lifetime可视生命周期

        onStart()-->onResume()->onpause()-->onStop();

        foreground lifetime前台生命周期

       onResume()-->onPause()

      横竖屏切换生命周期:

           默认情况下横竖屏切换先销毁再创建,

           屏幕的朝向固定下来landscape横屏 portrait竖屏

           让横竖屏切换的时候,Activity不敏感配置的变化。

    在清单文件的对象activty配置的添加以下配置:

      android:configChanges="orientation|keyboardHidden|screenSize"

     两个activity切换时的生命周期:

       Activity A跳转到ActivityB,再按下返回键回到Activity A,两个activity经历的生命周期过程。       A----oncreate      A----onstart      A----onresume      A----onpause          B----oncreate      B----onstart      B----onresume      A----onstop      B----onpause      A----onrestart      A----onstart      A----onresume      B----onstop      B----ondestroy

    3. Activity的启动模式

    ·        standard的启动模式, 默认标准的启动模式。

    绝大多数的Activity都是采用的standard的启动模式,开启新的Activity,这个Activity就会被加载到任务栈的栈顶。返回退出Activity,就从任务栈里面移除。如果任务栈清空,应用程序退出。 应用场景:绝大多数默认的情况。

     

    ·        singleTop

    顶部只有一个实例存在,如果这个Activity的实例已经被加入到任务栈的栈顶,这个Activity就不会被重新创建。应用场景:一个界面避免重复的开启很多次。singletop。 浏览器的书签

     

    ·        singleTask

    单一任务栈: 在任务栈里面只可以有1个实例存在 如果没有实例,就创建,加入到任务栈的栈顶, 如果有实例已经存在,就直接复用这个实例,然后清空这个实例上面所有的Activity。 应用场景: 如果一个Activity的内存开销或者是cpu开销非常大。一般我们设置这个Activity为singletask的启动模式。保证任务栈里面只有一个实例存在。 浏览器的BrowserActivity内存开销非常大。 webkit 浏览器的内核。 解析html标签。解析css标签。JavaScript解析引擎。

     

    ·        singleinstance

    前面的3种启动模式Activity都是运行在当前的应用程序默认任务栈里面。 singleinstance 自己单独开启一个任务栈运行。 在自己的单独的任务栈里面运行,整个手机操作系统里面只可能同时存在一个singleinstance实例的Activity。 应用场景: 有道词典,快速取词,通话界面

    转载请注明原文地址: https://ju.6miu.com/read-679745.html

    最新回复(0)