安卓1:简单了解安卓生命周期以及页面跳转

安卓Activity的生命周期以及跳转Activity

安卓是大家在生活中手机使用很广泛的一个手机系统,这一个系列的博客会简单讲述一下安卓的部分入门知识。由于本科阶段学习的知识不是很深入,知识方面或多或少没办法完全理解,如有错误,欢迎大家指正,互相学习进步。


在开始对安卓的学习之前,简单讲述了一下配置等基本要素。截止这篇文章发布日期,目前最新的安卓版本是Android11,但是永远记住代码学习的第一要素:一定不能用最新的版本,否则新添加的各种特性,不兼容的各种bug是我们目前无法解决的;这里我使用的是Android8.0(其实也算是还是有点新,会有很多改变),编译器选择Android Studio 3.0 (这里吐槽一下,同样是jetbrain公司开发的对java的编译器,这个编译器就是没有IDEA做的好,经常出bug,笔者最开始是默认4.0版本的Android Studio,各种bug无法排除,所以后来重新卸载安装了3.0)

在安装好Android Studio 3.0之后,我们选择新建一个项目,选择新建一个空的Activity,然后编译器会自动帮我们导入一些包(类似于IDEA的Maven,但我个人觉得没用Maven好用),等待完成,最后的界面就是这样:
在这里插入图片描述
简单说两句
AndroidMainifest.xml文件是一个应用清单。无论我们怎么创建项目,这个清单都会在我们项目的根目录下面存在;其主要作用一两句话说不清楚,目前来讲需要了解的就是,第一这个文件里面记录了整个软件的包名,第二声明了安卓经常用到的四大组件,像我们这里新建的项目,有一个activity,那么这个文件里面就声明了一个activity。此外,这个文件还有一些声明权限等功能,后面会讲到。
在这里插入图片描述

MainActivity就是我们主要写代码的地方了,而下面res目录的layout.xml文件是整个项目的布局文件,一般讲就是一个界面,对应一个activity,就像现在新建的项目一样,可以简单理解为:xml文件是设计界面的,而对应的activity是实现功能的。
在这里插入图片描述
主要需要讲的就是这些,mipmap是存放图片资源的,有时候这里会有很多不同后缀的文件夹(例如hdpi、mdpi或者xhdpi等),其实就是不同的分辨率。values是方便我们编写布局文件的,我的理解是可以让我们自定义,比如我们想让一个TextView显示文字是“Hello World”,那么我们一般是直接android:text = “Hello World”,但我们可以在strings.xml定义“Hello,World”这个字符串的名字是text1,然后我们可以直接在TextView空间里面使用text1就行。


接下来就是讲一下安卓的activity的生命周期,以及两个activity的跳转

首先我们在activity_main.xml文件添加一个按钮,记得设置这个按钮的id以及onClick方法,直接拖控件那种是不提倡的。
activity_main.xml文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="example.com.lab1.MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击跳转另一个Activity"
        android:onClick="onClick"
        />

</LinearLayout>

这个时候我们要实现activity的跳转,就得添加一个activity;这里我们需要注意的是,我们不能简单把这个组件当成一个新建java类,而是要新建一个activity,否则在前面说过的AndroidMainifest.xml里面以及layout文件夹里面都没有对应的文件。
在这里插入图片描述
以后新建组件的流程大致如此
新建完毕之后,我们可以看到layout里面多出了一个xml,在AndroidMainifest.xml里面也自动添加了对第二个activity的声明:
在这里插入图片描述
在这里插入图片描述


这个时候,我们就可以来考虑修改我们MainActivity的代码了
主要我们就是在我们重写的onCreate方法当中设置一个监听类,监听我们是不是点击了那个按钮;如果我们点击了,就用Intent来指定当前的activity是哪个,而将要跳转的activity是那个,然后用startActivity方法进行跳转,这样就实现了activity的跳转了。
在这里插入图片描述
在这里插入图片描述
为了让这个过程更加清晰,我们重写activity的所有状态,来分析我们这点击按钮的时候,activity的状态是什么,这里我们修改一下代码,重写所有的状态方法。
这是第一个activity的代码:

package example.com.lab1;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    
    

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

        Button button1 = findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        });

    }


    @Override
    public void onStop(){
    
    
        super.onStop();
        Log.d("Lab1-1","第一个activity执行onStop方法");
    }

    @Override
    public void onStart(){
    
    
        super.onStart();
        Log.d("Lab1-1","第一个activity执行onStart方法");
    }

    @Override
    public void onResume(){
    
    
        super.onResume();
        Log.d("Lab1-1","第一个activity执行onResume方法");
    }

    @Override
    public void onPause(){
    
    
        super.onPause();
        Log.d("Lab1-1","第一个activity执行onPause方法");
    }

    @Override
    public void onDestroy(){
    
    
        super.onDestroy();
        Log.d("Lab1-1","第一个activity执行onDestroy方法");
    }

}

这是第二个activity的代码:

package example.com.lab1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class Main2Activity extends AppCompatActivity {
    
    

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

    @Override
    public void onStop(){
    
    
        super.onStop();
        Log.d("Lab1-2","第二个activity执行onStop方法");
    }

    @Override
    public void onStart(){
    
    
        super.onStart();
        Log.d("Lab1-2","第二个activity执行onStart方法");
    }

    @Override
    public void onResume(){
    
    
        super.onResume();
        Log.d("Lab1-2","第二个activity执行onResume方法");
    }

    @Override
    public void onPause(){
    
    
        super.onPause();
        Log.d("Lab1-2","第二个activity执行onPause方法");
    }

    @Override
    public void onDestroy(){
    
    
        super.onDestroy();
        Log.d("Lab1-2","第二个activity执行onDestroy方法");
    }

}

首先启动,我们可以看到加载的是第一个activity,先调用了onCreate方法,然后是onStart方法,最后是onResume,表示运行状态,此时activity已经在模拟器的界面显示出来;
在这里插入图片描述

然后点击跳转,这时第一个activity执行onPause暂停,然后启动第二个activity,和启动第一个大致相同,启动之后,第一个activity执行onStop停止;
在这里插入图片描述

接着点击返回键返回第一个activity,可以看到,第二个先暂停onPause,然后第一个执行onRestart重新启动,接下来两步都是一致的onStart和onResume,此时第一个进行运行状态,而第二个activity就先执行onStop进行停止,接着便是onDestroy进行销毁;这样,打开一个activity然后新建一个activity然后关闭第二个activity的过程就是这样。
在这里插入图片描述

最后关掉这个APP
在这里插入图片描述
可以看到和第二个activity关闭调用的是一样的。

这篇博客让我们对安卓的activity有了一定的了解,当然还有很多我没有讲到,包括点击事件那个其实有三个方法;学习的路上永无止境,希望多多加油。

贴一些有关于基本配置方面的比较好的博文
修改SDK路径:https://blog.csdn.net/wejfoasdbsdg/article/details/54579289
修改虚拟机路径:https://www.cnblogs.com/geeksongs/p/11241320.html

猜你喜欢

转载自blog.csdn.net/weixin_44573310/article/details/109261108