• [Android 四大组件] --- Activity


    1 Activity是什么

    ​​Activity​​是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。

    一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。将Activity设为主活动的方法,如下面代码所示需要在AndroidManifest文件中添加以下内容:

    <application>
         ....
        <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
         </activity>
         ....
    </application>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    Activity 必须在 AndroidManifest.xml 注册,如果没有注册这 Activity 就不能正常运行,其实在正常情况下在使用Android 中的四大组件(Activity,Service,BrocastReceiver,ContentProvider)时都需要再 AndroidManifest.xml 中注册

    2 Activity创建流程

    先给出一个简单的示例,然后在分步骤讲解

    // MainActivity.java
    
    public class MainActivity extends AppCompatActivity
    {
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    // AndroidManifest.xml
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1> 自定义Activity类名 ,继承Activity类或者他的子类

    class MainActivity extends AppCompatActivity
    
    • 1

    继承Activity和AppCompatActivity的区别:
    AppCompatActivity兼容了很多低版本的一些东西
    AppCompatActivity相对于Activity的变化:主界面带有toolbar的标题栏

    2> 重写onCreate()方法,在该方法中调用setContentView()设置要显示的视图

        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3> 在AndroidManifest.xml中对Activity进行配置

    // AndroidManifest.xml
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4> 启动Activity: 调用startActivity(Intent)

    Intent it = new Intent(MainActivity.this, MyActivity.class);
    startActivity(it);
    
    • 1
    • 2

    5> 关闭Activity: 调用finish,直接关闭当前Activity
    我们可以把它写到启动第二个Activity的方法中,当启动第二个Activity时,第一个Activity就会被关闭

    3 启动一个Activity的几种方式

    Activity是通过Intent用来在应用程序的Activity间启动、停止和传输。

    启动Activity有三种方法:

    1 显示启动

    显式启动比较简单,首先创建一个Intent,指定应用程序上下文和需要启动的Activity,然后调用startActivity来启动新的Activity。

    <!--AndroidManifest.xml-->
    <activity android:name=".SecondActivity"></activity>
    
    • 1
    • 2
    //启动Activity
    Intent it = new Intent(this, SecondActivity.class);
    startActivity(it);
    
    • 1
    • 2
    • 3

    2 隐式启动

    若 SecondActivity 在AndroidManifest.xml文件中配置 intent-filter 的 action 和 category、data,如下:

        
           
           
       
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    那么可以通过如下方式启动 SecondActivity :

    Intent intent = new Intent("myaction2");
    startActivity(intent);
    
    • 1
    • 2

    3 默认启动

    通过桌面图标点击应用图标进入程序的第一个Activity,因其启动方式有别上述两个方式,将其划分为第三类的启动方式。 若Activity在AndroidManifest.xml文件的intent-filter的action和category,如下:

        
           
       
    
    
    • 1
    • 2
    • 3
    • 4

    那么,点击桌面的应用图标即可启动Activity。

    注:如果在N个Activity中都配置上述的action和category,那么桌面会有N个应用的图标,点击不同的图标会进入对应的Activity。

    4 Activity的生命周期

    在这里插入图片描述

    Note: onCreate, onStart, onResume(), onPause(), onStop(), onRestart(), onDestroy()这些都是回调函数,我们不能够去调用,我们能做的知识重写这些回调函数里的内容,什么时候调用由Activity决定。
    我们能够手动调用的只有finish()方法,该方法用于关闭某个Activity。

    onCreate():你必须实现此回调,它会在系统创建你的 Activity 时触发。你的实现应该初始化Activity的基本组件。

    onStart():此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。到了这一步用户可见不可交互。

    onResume():此时,该Activity位于Activity堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在onResume()方法中实现的。到了这一步用户可见可交互。

    onPause():当用户点按"返回"或"最近使用的应用"按钮时,Activity失去焦点并进入"已暂停"状态时,系统就会调用onPause()。到这一步用户可见不可交互。系统会停止动画等消耗CPU的操作。

    onStop():到了这一步用户不可见。停止动画和刷新UI等。

    onRestart():当处于"onStop()"状态的Activity即将重启时,系统就会调用此回调。

    onRestart()会从Activity停止时的状态恢复Activity至运行状态。

    onDestroy():这是Activity最后一个方法。可以用isFinishing()来判断它,如果有dialog在运转,要在这个界面将dialog给cancel掉,不然抛异常。

    5 Activity的四种状态

    在这里插入图片描述
    Running(运行):在屏幕前台(位于当前任务堆栈的顶部)

    Paused(暂停):失去焦点但仍然对用户可见(覆盖Activity可能是透明或未完全遮挡)

    Stopped(停止):完全被另一个Activity覆盖

    Destroyed(销毁):退出,完全销毁

  • 相关阅读:
    第一章 数据库SQL-Server(及安装管理详细)
    06实战:如何通过 ref 实现组件的子传父、父传子的交互(实例演示)?
    R语言ggplot2可视化:可视化多行文本内容并添加箭头、指定文本可视化内容右对齐(right alignment)
    JDK项目分析的经验分享
    解析 DAO 效率低下的原因及待考虑因素
    强化学习问题(二)--- ERROR: Failed building wheel for box2d-py
    dubbo 用户名密码问题
    吃透Chisel语言.31.Chisel进阶之通信状态机(三)——Ready-Valid接口:定义、时序和Chisel中的实现
    Java编程实战9:统计只差一个字符的子串数目
    Axure绘制折叠面板-手风琴效果
  • 原文地址:https://blog.csdn.net/weixin_42445727/article/details/132555327