安卓APP开发基础
目錄
- 安卓工程構建第一個APP運行
- 安卓的工程目錄文件夾介紹
- 安卓APP啟動過程
- 安卓布局控件
- 布局的種類
- 布局和頁面的關系
- 顯示一張美女圖
- 顯示兩個美女
- 常用布局之相對布局
- 基礎控件之Button,TextView,EditText,ImageView, padding和margin(內外邊框)
- 相對布局綜合小演練-智能家居刷卡界面
- 按鍵美化
- 常用布局之線性布局
- 介紹
- 線性布局orientation、weight、gravity、divider屬性
- 安卓按鍵響應的幾種方式
- 在xml中設置按鍵的onClick綁定的函數
- 自定義類實現按鍵監聽事件的接口
- 匿名內部類實現按鍵響應
- Activity實現click接口
- 安卓頁面跳轉
- 為安卓添加多個頁面
- 頁面跳轉方法
- 頁面跳轉傳參
- 安卓線程實現頁面若干秒后自動跳轉
- Activity(頁面)的生命周期
安卓工程構建第一個APP運行
嵌入式學習安卓目的其實是為了掌握簡單的安卓APP開發,最重要的目的并不是為了開發APP,而是為了了解APP開發的整個過程,方便為安卓開發工程師提供SDK包,也就是如何在手機APP上實現點燈等控制硬件的一系列操作。
點擊Finish,程序構建完畢。
如何啟動這個程序?由于自帶的模擬器啟動較慢,我們先去下載夜神模擬器(或者mumu模擬器,我是用的這個),運行。
eclipse和夜神建立連接之前,需要配置adb的環境變量(因為我們要在Windows的命令行終端使用這個指令):
找到之前我們安裝eclipse的路徑,找到adb.exe,如下圖所示
復制這個路徑,打開Windows環境變量配置界面(右擊我的電腦,屬性,高級系統設置,環境變量)
eclipse和mumu模擬器建立連接命令:
adb connect 127.0.0.1:7555連接成功:
運行,工程名字上右鍵,run as android appclication,發現mumu模擬器出現運行界面。
安卓的工程目錄文件夾介紹
-
src: 存放java代碼的,有包,有文件
-
gen: 存放自動生成的文件,關心里面的R.java,保存程序的頁面,按鍵,文本等控件的ID,它是自己生成的
-
Android:4.4: 存放安卓開發的一些庫(UI、藍牙等),供開發者調用
-
asserts: 存放一些資源,配置文件,圖片
-
bin: 編譯后會生成的一些文件,包括我們關心的apk
-
libs: 依賴庫
-
res:
*drawable前綴:存放app程序要用到的一些圖片(高分辨率、低分辨率等)
*layout: 存放布局文件的文件夾
一般一個activity(安卓頁面)對應一個布局(可以拖拽和編程實現界面布局,復雜界面最好采用編程方式,避免出現界面變形,QT也存在這個問題。)
*values: 存放一些參數,或者自定義控件的文件 -
AndroidMainfirst.xml: APP的配置
*權限:網絡訪問權限,名片夾訪問權限,相機訪問權限
*目標機器SDK版本
*APP的名字
*APP的圖標
*配置第一個被加載,啟動頁面
安卓APP啟動過程
Laucher(不斷檢測屏幕觸摸)->Androidmanifirst.xml->lauch標簽的activity被加載->oncreat被調用->java關聯xml布局頁面->顯示->等待用戶觸摸等操作
詳細參照博文:https://www.jianshu.com/p/4d199e96ec60
安卓布局控件
布局的種類
詳見https://blog.csdn.net/wenzhi20102321/article/details/52677595
布局和頁面的關系
顯示一張美女圖
將提前準備好的圖片,選中復制,粘貼到下圖目錄下。添加一行代碼,將圖片成功添加到APP中。
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"tools:context=".MainActivity" ></RelativeLayout>將別人的安卓工程源碼導入到eclipse中的方法:
file->import->選中整個文件夾,如下圖所示
打開后相應的代碼:
顯示兩個美女
引入ID、below(指定ID位置下方)的使用方法。
布局關系:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><RelativeLayout android:id="@+id/girl1"android:layout_width="match_parent"android:layout_height="400dp"android:background="@drawable/girl1"></RelativeLayout><RelativeLayout android:layout_below="@id/girl1"android:layout_width="match_parent"android:layout_height="400dp"android:background="@drawable/girl2"></RelativeLayout></RelativeLayout>常用布局之相對布局
RelativeLayout中子控件常用屬性:
-
1、相對于父控件,例如:android:layout_alignParentTop=“true”
android:layout_alignParentTop 控件的頂部與父控件的頂部對齊;
android:layout_alignParentBottom 控件的底部與父控件的底部對齊;
android:layout_alignParentLeft 控件的左部與父控件的左部對齊;
android:layout_alignParentRight 控件的右部與父控件的右部對齊; -
2、相對給定Id控件,例如:android:layout_above=“@id/**”
android:layout_above 控件的底部置于給定ID的控件之上;
android:layout_below 控件的底部置于給定ID的控件之下;
android:layout_toLeftOf 控件的右邊緣與給定ID的控件左邊緣對齊;
android:layout_toRightOf 控件的左邊緣與給定ID的控件右邊緣對齊;
android:layout_alignBaseline 控件的baseline與給定ID的baseline對齊;
android:layout_alignTop 控件的頂部邊緣與給定ID的頂部邊緣對齊;
android:layout_alignBottom 控件的底部邊緣與給定ID的底部邊緣對齊;
android:layout_alignLeft 控件的左邊緣與給定ID的左邊緣對齊;
android:layout_alignRight 控件的右邊緣與給定ID的右邊緣對齊; -
3、居中,例如:android:layout_centerInParent=“true”
android:layout_centerHorizontal 水平居中;
android:layout_centerVertical 垂直居中;
android:layout_centerInParent 父控件的中央;
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><RelativeLayout android:id="@+id/girl2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/testpic32"android:layout_centerInParent="true"></RelativeLayout></RelativeLayout>基礎控件之Button,TextView,EditText,ImageView, padding和margin(內外邊框)
由于拖拽的方式產生的控件容易跑飛,這里我們采用代碼的方式去生成控件。
內外邊框參照博文:https://www.cnblogs.com/dongh/p/9584962.html
相對布局綜合小演練-智能家居刷卡界面
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg_shopping_menu"tools:context=".MainActivity" ><RelativeLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#00ff00"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="智能家居"android:textSize="25dp"android:layout_marginLeft="15dp"android:layout_marginTop="6dp"/><Button android:id="@+id/zhuce"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="注冊"android:layout_alignParentRight="true"android:layout_marginRight="20dp"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查詢信息"android:layout_toLeftOf="@id/zhuce"/></RelativeLayout><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/pic_rf"android:layout_centerInParent="true"/><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/card"android:layout_centerInParent="true"android:paddingLeft="120dp"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/btn_selector"android:text="刷卡"android:layout_marginBottom="30dp"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"/></RelativeLayout>運行效果:
按鍵美化
方法:在drawable底下新建.xml文件(代碼如下面博文中介紹),然后在主xml里面去引用這些美化的xml。
https://blog.csdn.net/tracydragonlxy/article/details/88552262
常用布局之線性布局
介紹
之前介紹的相對布局,自由拖拽控件時,擺放的位置是任意的,而線性布局在拖拽時,控件是不能任意放置的。只能在橫線(默認)、豎線方向排列控件。
線性布局orientation、weight、gravity、divider屬性
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg_shopping_menu"tools:context=".MainActivity" ><LinearLayoutandroid:layout_width="400dp"android:layout_height="100dp"android:layout_centerInParent="true"android:orientation="horizontal" ><LinearLayoutandroid:layout_width="0dp"android:layout_height="100dp"android:layout_weight="1"android:divider="@drawable/fenge"android:dividerPadding="2dp"android:orientation="vertical"android:showDividers="middle|end" ><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:text="賬號" /><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:text="密碼" /><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:text="ID號" /></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="100dp"android:layout_weight="5"android:divider="@drawable/fenge"android:dividerPadding="2dp"android:orientation="vertical"android:showDividers="middle|end" ><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /></LinearLayout></LinearLayout></RelativeLayout>
fenge.xml
安卓按鍵響應的幾種方式
在xml中設置按鍵的onClick綁定的函數
activity_main.xml
MainActivity.java
package com.example.sgkbc.button;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void buttonBeCliecked(View v){//System.out.println(v.getId());switch(v.getId()){case R.id.button1:System.out.println("按鍵一被按下");Toast.makeText(this, "按鍵一被按下", 0).show();break;case R.id.button2:System.out.println("按鍵二被按下");Toast.makeText(this, "按鍵二被按下", 0).show();break;}}}自定義類實現按鍵監聽事件的接口
參照博文:安卓開發中的監聽器(OnClickListener)
步驟一:綁定局部變量button和xml中的button, 使用API函數:findViewById
步驟二:實現接口類,在類中實現onclicked方法,寫業務代碼
步驟三:為1,2兩步做的準備進行綁定,使得按鍵被按下后執行你寫的業務代碼
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按鍵一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="58dp"android:text="按鍵二" /></RelativeLayout>MainActivity.java
package com.example.sgkbc.button;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;//實現接口類,在類中實現onclicked方法,寫業務代碼 class MyClieckHandler implements View.OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.button1:System.out.println("按鍵一被按下");// Toast.makeText(this, "按鍵一被按下", 0).show();break;case R.id.button2:System.out.println("按鍵二被按下");// Toast.makeText(this, "按鍵二被按下", 0).show();break;}} }public class MainActivity extends Activity {Button btn1;Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//綁定 局部變量button和xml中的button, findViewByIdbtn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);//綁定 按鍵被按下后執行你寫的業務代碼btn1.setOnClickListener(new MyClieckHandler());btn2.setOnClickListener(new MyClieckHandler());}}匿名內部類實現按鍵響應
JAVA知識,匿名內部類由于沒有名字,導致每次用它的時候都要建這個類,并實現里面的接口。
MainActivity.java
package com.example.sgkbc.button;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;public class MainActivity extends Activity {Button btn1;Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubSystem.out.println("按鍵一被按下");Toast.makeText(MainActivity.this, "按鍵一被按下", 0).show();}});btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubSystem.out.println("按鍵二被按下");Toast.makeText(MainActivity.this, "按鍵二被按下", 0).show();}});}}activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按鍵一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="57dp"android:text="按鍵二" /></RelativeLayout>Activity實現click接口
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按鍵一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="58dp"android:text="按鍵二" /></RelativeLayout>MainActivity.java
package com.example.sgkbc.button;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;//繼承 //重寫接口 public class MainActivity extends Activity implements View.OnClickListener{Button btn1;Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.button1:System.out.println("按鍵一被按下");// Toast.makeText(this, "按鍵一被按下", 0).show();break;case R.id.button2:System.out.println("按鍵二被按下");// Toast.makeText(this, "按鍵二被按下", 0).show();break;}}}安卓頁面跳轉
為安卓添加多個頁面
在src下new一個.Activity文件,就新建了一個頁面,繼續new則繼續添加頁面。添加成功后會產生相對的JAVA以及xml文件,另外圖中介紹了將相應頁面設置成安卓啟動界面的方法。
頁面跳轉方法
跳轉的API使用方法:
介紹三個界面的跳轉方法例子(一跳到二,二跳到三):
MainActivity.java
package com.example.sgkbc.activity;//注意快捷鍵自動導包的方法import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void goSecond(View v){//intent去設置要跳轉的頁面Intent intent = new Intent(this, SecondActivity.class);//跳轉startActivity(intent);} }activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="goSecond"android:text="跳轉到第二個頁面" /><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="55dp"android:text="這是第一個頁面" /></RelativeLayout>SecondActivity.java
package com.example.sgkbc.activity;import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View;public class SecondActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);}public void goThird(View v){//intent去設置要跳轉的頁面Intent intent = new Intent(this, ThirdActivity.class);//跳轉startActivity(intent);}}activity_second.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".SecondActivity" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:layout_marginLeft="16dp"android:layout_marginTop="113dp"android:text="這是第二個頁面" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView1"android:layout_alignParentTop="true"android:layout_marginTop="16dp"android:onClick="goThird"android:text="跳轉到第三個頁面" /></RelativeLayout>ThirdActivity.java
package com.example.sgkbc.activity;import android.os.Bundle; import android.app.Activity; import android.view.Menu;public class ThirdActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_third);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.third, menu);return true;}}activity_third.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".ThirdActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="這是第三個頁面" /></RelativeLayout>
頁面跳轉傳參
方法一:使用intent
傳遞:
接收:
MainActivity.java
SecondActivity.java
package com.example.sgkbc.activity;import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.Toast;public class SecondActivity extends Activity {private String data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);//接收來自第一個界面Intent i = this.getIntent();//不能new一個 要在這個底下獲取到這個Intentdata = i.getStringExtra("MyData");// 鍵值//System.out.println("收到數據:"+data);Toast.makeText(this, "第二個頁面收到數據:"+data, 0).show();}public void goThird(View v){//intent去設置要跳轉的頁面 繼續給第三個界面傳Intent intent = new Intent(this, ThirdActivity.class);intent.putExtra("MyData", data);//跳轉startActivity(intent);}}
方法二:使用bundle
發送:
接收:
MainActivity.java
package com.example.sgkbc.activity;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void goSecond(View v){//intent去設置要跳轉的頁面Intent intent = new Intent(this, SecondActivity.class);Bundle bundle = new Bundle();bundle.putString("MyData", "愛你哦");bundle.putInt("ID", 521);intent.putExtras(bundle);// intent.putExtra("MyData", "愛你哦");//跳轉startActivity(intent);} }SecondActivity.java
package com.example.sgkbc.activity;import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.Toast;public class SecondActivity extends Activity {//private String data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Intent i = this.getIntent();//data = i.getStringExtra("MyData");//MyData//System.out.println("收到數據:"+data);Bundle b = i.getExtras();String data = b.getString("MyData");int data2 = b.getInt("ID");Toast.makeText(this, "第二個頁面收到數據:"+data+data2, 0).show();}public void goThird(View v){//intent去設置要跳轉的頁面Intent intent = new Intent(this, ThirdActivity.class);// intent.putExtra("MyData", data);//跳轉startActivity(intent);}}安卓線程實現頁面若干秒后自動跳轉
實現頁面的若干秒后的自動跳轉效果
運行安卓程序,發現三秒后自動跳轉到第二個界面。
Activity(頁面)的生命周期
參照博文——基礎總結篇之一:Activity生命周期
1.啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后臺:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。
5.用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。
6.當前Activity處于被覆蓋狀態或者后臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。
詳細驗證過程參照自己的代碼或者上面博文的示例。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 技术积累
- 下一篇: SVPWM调制中非零基础矢量的幅值是2/