安卓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好用),等待完成,最後的界面就是這樣:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB1EeNpXTzUFROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0gjNzUjNzQTM0IDMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
簡單說兩句
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