天天看點

安卓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好用),等待完成,最後的界面就是這樣:

安卓1:簡單了解安卓生命周期以及頁面跳轉

簡單說兩句

AndroidMainifest.xml檔案是一個應用清單。無論我們怎麼建立項目,這個清單都會在我們項目的根目錄下面存在;其主要作用一兩句話說不清楚,目前來講需要了解的就是,第一這個檔案裡面記錄了整個軟體的包名,第二聲明了安卓經常用到的四大元件,像我們這裡建立的項目,有一個activity,那麼這個檔案裡面就聲明了一個activity。此外,這個檔案還有一些聲明權限等功能,後面會講到。

安卓1:簡單了解安卓生命周期以及頁面跳轉

MainActivity就是我們主要寫代碼的地方了,而下面res目錄的layout.xml檔案是整個項目的布局檔案,一般講就是一個界面,對應一個activity,就像現在建立的項目一樣,可以簡單了解為:xml檔案是設計界面的,而對應的activity是實作功能的。

安卓1:簡單了解安卓生命周期以及頁面跳轉

主要需要講的就是這些,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檔案夾裡面都沒有對應的檔案。

安卓1:簡單了解安卓生命周期以及頁面跳轉

以後建立元件的流程大緻如此

建立完畢之後,我們可以看到layout裡面多出了一個xml,在AndroidMainifest.xml裡面也自動添加了對第二個activity的聲明:

安卓1:簡單了解安卓生命周期以及頁面跳轉
安卓1:簡單了解安卓生命周期以及頁面跳轉

這個時候,我們就可以來考慮修改我們MainActivity的代碼了

主要我們就是在我們重寫的onCreate方法當中設定一個監聽類,監聽我們是不是點選了那個按鈕;如果我們點選了,就用Intent來指定目前的activity是哪個,而将要跳轉的activity是那個,然後用startActivity方法進行跳轉,這樣就實作了activity的跳轉了。

安卓1:簡單了解安卓生命周期以及頁面跳轉
安卓1:簡單了解安卓生命周期以及頁面跳轉

為了讓這個過程更加清晰,我們重寫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已經在模拟器的界面顯示出來;

安卓1:簡單了解安卓生命周期以及頁面跳轉

然後點選跳轉,這時第一個activity執行onPause暫停,然後啟動第二個activity,和啟動第一個大緻相同,啟動之後,第一個activity執行onStop停止;

安卓1:簡單了解安卓生命周期以及頁面跳轉

接着點選傳回鍵傳回第一個activity,可以看到,第二個先暫停onPause,然後第一個執行onRestart重新啟動,接下來兩步都是一緻的onStart和onResume,此時第一個進行運作狀态,而第二個activity就先執行onStop進行停止,接着便是onDestroy進行銷毀;這樣,打開一個activity然後建立一個activity然後關閉第二個activity的過程就是這樣。

安卓1:簡單了解安卓生命周期以及頁面跳轉

最後關掉這個APP

安卓1:簡單了解安卓生命周期以及頁面跳轉

可以看到和第二個activity關閉調用的是一樣的。

這篇部落格讓我們對安卓的activity有了一定的了解,當然還有很多我沒有講到,包括點選事件那個其實有三個方法;學習的路上永無止境,希望多多加油。

貼一些有關于基本配置方面的比較好的博文

修改SDK路徑:https://blog.csdn.net/wejfoasdbsdg/article/details/54579289

修改虛拟機路徑:https://www.cnblogs.com/geeksongs/p/11241320.html