android之activity(活動)
Acitivity
Acitivity翻譯過來是活動的意思,而我的理解是:可以把Acitivity理解為是一個介面。就是你手機螢幕看到的就是一個Acitivity。接下來我就簡單講下怎麼使用它,
主要講以下知識點:
- Acitivity的啟動方式
- Actiity的傳遞資料
- Activity的生命週期
- Activity啟動模式
Acitivity的啟動方式之startActivity()
下面我就用程式碼演示下:先建立兩個Aitivity
兩個佈局檔案程式碼如下:
- 佈局檔案一
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.edu.androidforactivity.MainActivity" >
<TextView
android:textColor="#ff0000"
android:textSize="26sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="介面一" />
<Button
android:text="確定"
android:layout_width="match_parent"
android:layout_height ="wrap_content"
android:onClick="onclick"
/>
</LinearLayout>
2 。 佈局檔案二
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.edu.androidforactivity.MainActivity">
<TextView
android:textColor="#ff0000"
android:textSize="26sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="介面二" />
<Button
android:text="確定"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onclick"
/>
</LinearLayout>
兩個Acitivity程式碼如下:
- MainActivity.java
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onclick(View view){
//兩個引數的意思 1,上下文,2,代表你跳轉的avtivity.
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);//開啟Activity
}
}
2 . MainActivity.java程式碼如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
}
執行結果
執行結果就是,點選按鈕會MainActivity跳轉到Main2Activity中去
Acitivity的啟動方式之 startActivityForResult()
你把上面的startActivity()方法換成startActivityForResult()這個也能跳轉到第二個Main2Activity。這裡我就不講了,在接下來將acitivity傳遞資料時在仔細講這種傳遞方式。
Actiity的傳遞資料
我們可以把資料傳遞放在intent中去,然後獲取即可。下面我們就用程式碼實現。
- 回傳資料。
兩個佈局檔案程式碼如下:
activity_main.xml程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.edu.androidforactivity.MainActivity">
<TextView
android:textColor="#ff0000"
android:textSize="26sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="介面一" />
<Button
android:text="確定"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onclick"
/>
<TextView
android:textSize="26sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/result_tv"
/>
</LinearLayout>
activity_main2程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.edu.androidforactivity.MainActivity">
<TextView
android:textColor="#ff0000"
android:textSize="26sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="介面二" />
<Button
android:text="確定"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onclick"
/>
<EditText
android:id="@+id/input_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入"
/>
</LinearLayout>
這兩個佈局檔案很簡單,就不解釋了
MainActivity.java程式碼如下:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView mTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTv= (TextView) findViewById(R.id.result_tv);
}
public void onclick(View view){
//兩個引數的意思 1,上下文,2,代表你跳轉的avtivity.
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(intent,0);//開啟Activity
}
//三個引數的含義 1,代表的是哪個控制元件請求的,2,代表的是哪個傳來到額資料,3,意圖,一般會攜帶資料
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode==RESULT_OK){
String content=data.getStringExtra("content");
mTv.setText(content);
Toast.makeText(MainActivity.this,"回傳成功",Toast.LENGTH_SHORT).show();
}
}
}
Main2Activity.java程式碼如下:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class Main2Activity extends AppCompatActivity {
private EditText mEt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mEt = (EditText) findViewById(R.id.input_et);
}
public void onclick(View view){
Intent intent=new Intent();
String content=mEt.getText().toString();//獲取使用者輸入的資料
intent.putExtra("content",content);//把資料放到intent中
setResult(RESULT_OK,intent);//會回撥開啟自己的Activity中的onActivityResult()方法
finish();//銷燬當前的activity
}
}
執行結果如下:
回傳資料只是簡單的實現了下,其實裡面的內容還是比較多的,比如activity多了以後,我們就要根據請求碼跟返回碼來操作。來確定是哪個控制元件請求的,該返回給哪個activity 學完了回傳資料,還有一種方式傳遞資料,這個比較簡單。就不在寫出來了。接下來重點要學習的是activity生命週期。
Activity生命週期
先看下官網上給的圖
首先我們看到這個圖有幾個迴圈,我們就每個演示下,這樣會比較理解。
首先我們建立個 Activity
MainActivity.java程式碼如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG="TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate: .........");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: .............");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: ...........");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: ..............");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop: ...............");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: .................");
}
}
當我們執行時,介面出來後執行的結果是:
按返回鍵後執行的結果是:
這就是一個完整的週期,然後我們在建立一個Activity, 假設用A 和 B代表兩個Activity,A跳轉B中,然後按返回鍵,看執行結果。
當我們執行時,介面出來後執行的結果是:
然後跳轉到B 介面中 執行的結果是:
按返回鍵後執行的結果是:
再按返回鍵後執行的結果是:
如果我們在A活動中彈出對話方塊時,是不執行任何的方法。如果對話方塊是Activity就會執行相應的方法。比如也是兩個活動,在A中啟動B(B是以對話方塊形式的)。然後我們按返回鍵,直到完全退出應用了,看下執行了哪些方法;
可以直接在清單檔案中把第二個Activity加句 android:theme=”@style/Theme.AppCompat.Dialog.Alert”就可以了。
執行結果:
執行後首先看到A介面,執行的方法是
A onCreat() >- A onStart() >- A onResume
然後跳轉到B介面中執行的方法是
A onPause() >-B onCreate() >- B onStart() >- B onResume
然後點選返回鍵 執行的方法是:
B onPause() >- A onResume() >- B onStop() >- B onDesroy()
然後再點選返回鍵 執行的方法是:
A onPause() >-A onStop() >- A onDestroy()
Activity啟動模式:
假設三個Acitivity A B C .
1 standard
這就是系統預設的啟動模式,該模式是每啟動一個就會放在棧頂。
2 singleTop
該模式是如果該Activity位於棧頂,然後又開啟該Activity,就不會建立並進棧。還是用原來的。
3 singleTask
該模式是,如果建立的Activity棧裡面有的話。就不會建立,並且把該Activity之上的全部出棧,讓該Activity位於棧頂。
4 singleInstance
該模式是,開闢一個新棧,把新建立的Activity放進去,如果下次還是建立該Activity,就不會再建立咯。
原始碼下載
相關推薦
android之activity(活動)
Acitivity Acitivity翻譯過來是活動的意思,而我的理解是:可以把Acitivity理解為是一個介面。就是你手機螢幕看到的就是一個Acitivity。接下來我就簡單講下怎麼使用它, 主要講以下知識點: Acitivity
Android之Activity之間傳遞對象
this .get tin 方式 art desc 內容 ext pri 在非常多時候,我們須要在Activity之間傳遞對象,比方當你點擊了某列表的item,須要傳遞給下一個Activity該對象,那我們須要該怎麽做呢? Android支持兩種傳遞對象的方式。一種
Android之Activity生命週期簡介
概述 有圖有真相,所以先上圖: 上圖是從Android官網截下的Activity的生命週期流程圖,結構非常清晰,它描述了Activity在其生命週期中所有可能發生的情況以及發生的先後順序,下面就將結合此圖詳細介紹一下Activity的生命週期。 --- --- Activity四大
Android之Activity間的資料傳遞
主佈局 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
Android之Activity全面解析
前言 基於最近要準備去面試,特意系統的複習了下Android基礎,看到Activity這塊時,發現很多都忘了,而且之前也沒有系統的學習和寫筆記記錄,所以,特此寫下這篇關於Activity的一些理解,旨在幫助大家更好的理解Activity. Activity是
Android之Activity系列總結(一)--Activity概述
本文內容建立 Activity實現使用者介面在清單檔案中宣告 Activity啟動 Activity啟動 Activity 以獲得結果結束 Activity管理 Activity 生命週期實現生命週期回撥儲存 Activity 狀態處理配置變更協調 Activity 是一個應用元件,使用者可與其提供的螢幕進行
Android之Activity生命週期總結(二)
上一次寫了一下正常情況下的生命週期,這一次在這裡對異常狀態的生命週期進行一個個人的總結。 Activity除了使用者正常的操作所導致的生命週期方法的呼叫,但是還有一些極端的情況會導致Activity 生命週期 無法按照正常的情況去呼叫。下面具體的分析異
Android之Activity的三種狀態陳述
Activity存在三種狀態 ①Resumed重新啟動 activity回到螢幕的前面或者又獲得使用者的焦點,處於這種狀態的窗體使用者可以操作。 ②Paused暫停 什麼時候會出現暫停?當另外一個activity在前面或者得到焦點的時候,當前的activity就會處於暫停狀
Android 之 Activity生命週期
1.啟動Activity:系統會先呼叫onCreate方法,這是生命週期第一個方法,然後呼叫onStart方法,最後呼叫onResume,Activity進入 執行狀態。 onCreate方法:一般做一些初始化工作,比如setContentView去載入佈局資源,初
Android之Activity生命週期淺析(一)
Activity作為四大元件之一,出現的頻率相當高,基本上我們在android的各個地方都能看見它的蹤影,因此深入瞭解Activity,對於開發高質量應用程式是很有幫助的。今天我們就來詳細地聊聊Activity的生命週期,以便我們在以後的開發中能如魚得水。
淺談Android之Activity Decor View建立流程介紹
6 Activity DecorView建立流程介紹 上頭已經完整的介紹了Activity的啟動流程,Activity是如何繫結Window,Window的décor view是如何通過ViewRootImpl與WMS建立關聯的,也就是說,整個框架已經有了,唯一缺的就是Ac
淺談Android之Activity 視窗顯示流程介紹(二)
7.3 Activity Décorview佈局(layout) Measure確定Décor View以及child views的大小,layout則是確定child view在其parent view中的顯示區域,只有layout結束,view的left,right,t
淺談Android之Activity 視窗顯示流程介紹(一)
7 Activity 視窗顯示流程介紹 Activity 視窗顯示,其實就是Décor View繪製並顯示的過程,但是在繪製之前,Décor View需要先做下面兩件事情: 1) 確定Décor View的大小 2) 對Décor View進行佈局操作,也就是確定Déc
Android之Activity的框架原理分析
這一側的Layer物件,而操作Layer物件的目的就是為了修改Activity元件的UI。 在前面Android應用程式與SurfaceFlinger服務的關係概述和學習計劃和Android系統Surface機制的SurfaceFlinger服務簡要介紹
Android之主活動的建立
所謂主活動,就是單擊桌面應用程式圖示時首先開啟的活動,具體建立過程如下: 1. 開啟Android Studio,新建一個專案MainActivity,並選擇Add No Activity; 2. 在src/main/java中的預設包中新增一個新類MyActivi
android之fragment活動棧單例
本文主要記錄一些零碎的東西 最近參加了一個做地圖的公司的面試,怎麼說呢,反正問的我都不會,問題感覺偏向記憶體的顯示優化方向,比如Bitmap佔記憶體大小啦之流,只怪自己學業不精。 專案還要繼續,在寫專案時,發現fragment的活動棧有些問題,回想起面試官問過這個問題 ,研
淺談Android之Activity觸控事件傳輸機制介紹
8 Activity觸控事件傳輸機制介紹 當我們觸控式螢幕幕的時候,程式會收到對應的觸控事件,這個事件是在app端去讀取的嗎?肯定不是,如果app能讀取,那會亂套的,所以app不會有這個許可權,系統按鍵的讀取以及分發都是通過WindowManagerService來完成
Android之Activity的啟動模式
在Android中每個介面都是一個Activity,切換介面操作其實是多個不同Activity之間的例項化操作。在Android中Activity的啟動模式決定了Activity的啟動執行方式。 Android總Activity的啟動模式分為四種: Activity啟動模式設定: <a
android 之 Activity lifecycle
當頁面載入一個新的Activity 時會呼叫預設實現的三個方法,依次為:onCreate();onStart();onResume(); 當這三個方法被依次執行完以後,該Activity 就可以與使用者互動了。 為:Activity is running. 當頁面按返回鍵時
Android之activity的生命週期
一、四大元件之一的Activity元件,在應用中一個activity可用來表示一個介面,中文意思為“活動”,即一個活動 開始,代表activity元件啟動,活動結束,activity的生命週期結束。一個android應用鼻血通過activity來啟動和執行。activity