iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
1
Software Development

[Andriod] Andriod Studio 從入門到進入狀況系列 第 12

[Day 11] 我的第一個Android程式 - BMI程式設計(六) 解讀程式流程

之前忘了做一件事了,
今天補回來,
就是java檔案的講解,
雖然Android已經幫我們建好了,
而且基本上什麼功能都沒有,
不過為了之後繼續深入,
還是要了解一下程式的流程,
以下先貼出目前完整的後端內容,

package com.example.user.mybmi;

import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.LocaleList;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;

import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Resources res = getResources();
        Configuration conf = res.getConfiguration();
        Locale.setDefault(Locale.SIMPLIFIED_CHINESE);
        createConfigurationContext(conf);

        setContentView(R.layout.activity_main);
    }
}

現在開始逐項講解

package com.example.user.mybmi;

這一行的作用是指出這個檔案所在的命名空間,package(套件)是關鍵字,
如果我們寫了一個java檔案,
其他的檔案要引用到他的class或class內的方法,
就需要

import com.example.user.mybmi;

import其實就是引用的意思,
每個程式語言寫法有點不一樣,
像C++是include,
C#是using,
(C++也有using)
VB是Imports,
PHP有include跟require,
其實都是大同小異...

其中最重要的套件就是

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

程式中預設導入這兩個套件,幾乎所有的Android應用程式都會用到這兩個套件, Android平臺支援的package主要因為手機系統特性與程式碼授權的考量,與標準版的Java支援的package不盡相同。在設計Android應用程式時,常常需要參考可用的API列表,完整的API可以查閱官方支援的package列表
https://developer.android.com/reference/packages

public class MainActivity extends AppCompatActivity

MainActivity是這個類別的名稱,extends表示MainActivity這個類別的功能、型別等全繼承自AppCompatActivity類別。
整句話的意思是 宣告一個公開的MainActivity類別。這個MainActivity類別繼承了程式開頭導入的AppCompatActivity類別。
早期都是繼承自Activity,AppCompatActivity似乎是優化了一些UI及效率,這部分沒有深入研究

protected void onCreate(Bundle savedInstanceState)

onCreate是這個方法的名稱,void表示不需任何回傳值,這個方法導入了一個名為savedInstanceState(儲存實體狀態)的Bundle型別參數,Bundle型別正是我們前面所導入的package之一,Bundle的內容與Android手機平臺的記憶體管理有關。
Bundle類別可以保存Activity上一次關閉(stop)時的狀態,我們可以透過覆載onStop方法來保存關閉前的狀態,當程式啟動時,會再次呼叫onCreate方法,就能從savedInstanceState中得到前一次凍結的狀態。
我們也可以透過Bundle來將這個Activity的內容傳到下一個Activity中。

super.onCreate(savedInstanceState);

super是關鍵字,代表這個MainActivity類別的上層類別AppCompatActivity,意思是執行AppCompatActivity類別中onCreate方法的內容,一個Android應用程式,會對應到一個以上的Activity,onCreate方法是每個Activity類別初始化時都會去呼叫的方法。我們想做的是保持原本onCreate方法預設的動作,然後在其中加入我們想要的內容。
因為我們已經覆載(@Override)了MainActivity類別的onCreate方法,因此如果我們想將原本的onCreate方法內容保留,再加上我們自己的內容,就要使用super語句,並傳入savedInstanceState參數。如此就會先執行AppCompatActivity類別的onCreate方法,再執行我們覆載的onCreate方法裡面的其他程式內容。

setContentView(R.layout.activity_main);

螢幕顯示的畫面,是透過各種介面元件的排列配置結構來描述的。要將一套版面配置的層次結構轉換到一個螢幕上時,Activity會呼叫它用來設定螢幕顯示內容的setContentView方法,並傳入定義了版面配置的Xml描述檔。當Activity被啟動並需要顯示到螢幕上時,系統會通知Activity並根據引用的Xml檔來描繪出使用者介面。


上一篇
[Day 10] 我的第一個Android程式 - BMI程式設計(五) 多國語系2
下一篇
[Day 12] 我的第一個Android程式 - BMI程式設計(七) 終於完成基本功能
系列文
[Andriod] Andriod Studio 從入門到進入狀況33

1 則留言

0
TinFungHK
iT邦見習生 0 級 ‧ 2019-03-03 18:52:39

感謝樓主!我寫了一個月也沒認真研究這些程式是幹嘛的。

小魚 iT邦高手 1 級‧ 2019-03-04 13:57:26 檢舉

如果真的要寫API還是需要去了解,
我寫的這些還算是比較基本的部分,
太深的東西其實我也不熟,
畢竟不是以寫手機為主.

我要留言

立即登入留言