安卓APP_ 四大基本组件—— Activity

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓APP_ 四大基本组件—— Activity相关的知识,希望对你有一定的参考价值。

摘自:安卓APP_ 四大基本组件(1)—— Activity
作者:丶PURSUING
发布时间: 2021-04-22 15:56:18
网址:https://blog.csdn.net/weixin_44742824/article/details/116006048

配合菜鸟教程食用效果更佳:4.1.1 Activity初学乍练

一、认识Activity

经过前面的学习,对Activity一定不陌生,今天来系统地认识一下它。

Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方, 一个App允许有多个Activity

二、Activity跳转

点击按钮跳转Activity

在这里插入图片描述

认识清单列表

在这里插入图片描述

手动创建第二个Activity

当然可以自动创建(直接生成java文件和xml文件)
在这里插入图片描述为了更好地了解这个过程,我们选择手动创建一个MainActivity2.java,继承系统的Activity并实现onCreate,添加layout布局。

在这里插入图片描述
组件还必须要在清单文件中注册(认识清单文件中有说明)

创建按钮点击事件跳转Activity

在这里插入图片描述在这里插入图片描述

具体细节代码中呈现

androidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<!--清单文件-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myactivity">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyActivity">
<!--        首次启动的是默认的MainActivity-->
        <activity android:name=".MainActivity">
<!--    激活默认的Activity的意图:点击图标直接打开默认的Activity-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<!--        组件必须在清单文件里面注册-->
        <activity android:name=".MainActivity2"/>

    </application>
</manifest>

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

Mainactivity.java

//默认的Activity         继承系统的Activity,成为它的子类
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //跳转到第二个Activity的事件函数
    public void startActivity2(View view) {
        startActivity(new Intent(this,MainActivity2.class));
    }
}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="352dp"
        android:layout_height="75dp"
        android:text="我是MainActivity1"
        android:textSize="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="232dp"
        android:layout_height="79dp"
        android:layout_marginBottom="196dp"
        android:text="点我跳转"
        android:textSize="25sp"
        android:onClick="startActivity2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Mainactivity2.java

public class MainActivity2 extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="352dp"
        android:text="我是MainActivity2"
        android:textSize="40dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

三、Activity生命周期

简单来说,无论是哪一个应用,每个卡片的状态,存活还是销毁,加载还是未加载,这就是所谓的生命周期。

在上文的基础上,添加生命周期函数,并在每个函数里打印调试信息观察执行状况:

MainActivity.java

//默认的Activity         继承系统的Activity,成为它的子类
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "zhua";

    @Override
    //创建
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "onCreate:");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "onStart: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "onRestart: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "onResume: " );
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "onPause: " );
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "onStop: " );
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "onDestroy: ");
    }

    //跳转到第二个Activity的事件函数
    public void startActivity2(View view) {
        startActivity(new Intent(this,MainActivity2.class));
    }
}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

(1)首次运行软件

在这里插入图片描述

界面打开,onCreate先被调用,意味着可以在这里做布局的初始化工作
在这里插入图片描述
onStart():是activity界面被显示出来的时候执行的,用户可见。

onResume():是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。

(2)点击主页面按钮,回到桌面,卡片不可见

在这里插入图片描述

(3)再次打开

在这里插入图片描述

(4)点击按钮跳转到另外一个Activity

在这里插入图片描述

(5)点击返回按钮到桌面,再返回卡片

点击返回按钮返回到桌面使得卡片不可见执行了销毁。

在这里插入图片描述

一张图总结生命周期

(图来自菜鸟教程)
在这里插入图片描述

四、其他三大组件暂不深入了解

Service:服务

当应用不显示时,程序可以挂载在后台执行下载,更新,音乐播放等后台服务。

BroadcastReceiver:广播

BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系统广播。

每个APP都会收到,如果你想让你的应用在接收到 这个广播的时候做一些操作,比如:系统开机后,偷偷后台跑服务,这个时候你只需要为你的应用 注册一个用于监视开机的BroadcastReceiver,当接收到开机广播就启动服务。

当然我们也可以自己发广播,比如:接到服务端推送信息,用户在别处登录,然后应该强制用户下线回到 登陆界面,并提示在别处登录。

ContentProvider:内容提供者

我们想在自己的应用中访问别的应用,或者说一些ContentProvider暴露给我们的一些数据, 比如手机联系人,短信等,我们想对这些数据进行读取或者修改,这就需要用到ContentProvider了。

我们自己的应用,想把自己的一些数据暴露出来,给其他的应用进行读取或操作,我们也可以用 到ContentProvider,另外我们可以选择要暴露的数据,就避免了我们隐私数据的的泄露。

以上是关于安卓APP_ 四大基本组件—— Activity的主要内容,如果未能解决你的问题,请参考以下文章

安卓基础之 四大基本组件介绍与生命周期

Android安卓四大组件之Activity

安卓四大组件

安卓四大组件

Android安卓四大组件之Activity

Android安卓四大组件之Activity