天天看點

Android的Activity的頁面跳轉和資料傳遞

1.AndroidManifest檔案中的幾個細節 , Android系統中一個界面就對應了一個activity。

 1.一個應用程式可以有多個桌面圖示:

建立桌面圖檔的方法,給activity添加以下節點:

<intent-filter>

//MAIN:應用程式的入口  

<action android:name="android.intent.action.MAIN" />     

//LAUNCHER:啟動器. category常見的類型:CAR_MODE、CAR_DOCK車載電腦模式、LAUNCHER啟動器、DEFAULT預設的類型,我們自己開發的activity通常使用這個類型。                

<category android:name="android.intent.category.LAUNCHER" />          

</intent-filter>    

1.action動作:可以使用系統定義好的類類型,可以自定義(大寫);        

2.activity節點中的label标簽的值表示桌面圖示的名稱;    

3.application節點中的label标簽的值可以在應用程式管理清單中看到;    

4.application節點中的label和activity節點中的label标簽不是一個概念,activity節點中的label标簽表示界面的标題;   

2.意圖設定動作激活新的界面(重點)

Intent意圖:做一件事情的想法;

意圖包括的元素:動作:action,資料:data

意圖的作用:激活元件和攜帶參數.

* 使用意圖開啟一個activity的代碼:

//隐式意圖  

Intent intent = new Intent();

//設定目标activity的動作(必須與配置檔案的aciton一緻)      

intent.setAction("android.intent.action.SHOWSECOND");      

//設定目标data的動作(必須與配置檔案的data一緻)      

intent.setData(Uri.parse("qaa://011"));      

//設定目标category的動作(必須與配置檔案的category一緻)      

intent.addCategory("android.intent.category.DEFAULT");

//開啟一個新的activity(打開一個新的界面)      

startActivity(intent);  

3.意圖設計的目的

解耦:讓應用程式能夠獨立運作又能互相調用.

* WebView的使用:

 wv = (WebView) findViewById(R.id.wv);   

//設定浏覽器不帶緩存的功能   

WebSettings settings = wv.getSettings();   

//設定浏覽器是記錄緩存資料   

settings.setAppCacheEnabled(false);      

//擷取其他應用程式使用intent傳遞雇來的資料   

Intent intent = getIntent();      

Uri uri = intent.getData();    

if(uri != null){    

wv.loadUrl(uri.toString());   

}

4.隐式意圖和顯式意圖(重點)

* 隐式意圖:

在開啟目标activity的時候沒有直接指定目标activity名稱,通過指定一組動作、資料、類型等,讓系統自動的去配置檔案中比對目标activity。開啟的速度比較慢。

    模版代碼:

  Intent intent = new Intent();    

 //設定目标activity的動作(必須與配置檔案的aciton一緻)      

intent.setAction("android.intent.action.SHOWSECOND");      

//設定目标data的動作(必須與配置檔案的data一緻)      

intent.setData(Uri.parse("itheima://110"));      

//設定目标category的動作(必須與配置檔案的category一緻)      

intent.addCategory("android.intent.category.DEFAULT");      

//開啟一個新的activity(打開一個新的界面)      

startActivity(intent);

 應用場景:     

開啟别的應用程式中的activity。

* 顯式意圖:     

在開啟目标activity的時候直接指定目标activity名稱。開啟的速度比較快。

   模版代碼:

  //建立顯式意圖,速度比較快。參數1:代表上下文,參數2:位元組碼。      

Intent intent = new Intent(this, SecondActivity.class);      

//開啟目标activity      

startActivity(intent);

   應用場景:限于應用程式内部開啟activity。

5.意圖傳遞資料(重點)

從第一個界面跳轉到第二個界面上,并且把資料傳遞給第二個界面。

傳遞資料:

//建立顯式意圖      

Intent intent=new Intent(this, SecondActivity.class);        

 // 裝入名字    

intent.putExtra("name", "qaa");   

//裝入年齡     

intent.putExtra("age", 11);            

//簡單的裝入

Bundle b = new Bundle();      

b.putString("name", "ama");      

b.putInt("age", 4);            

intent.putExtras(b);      

//開啟目标activity      

startActivity(intent);

接收資料:     

//獲得調用者傳遞過來的意圖對象   

Intent intent = getIntent();      

// 獲得傳遞過來的名字 

String name = intent.getStringExtra("name");   

//獲得傳遞過來的年齡

 int age = intent.getIntExtra("age", 0);      

//間接獲得

Bundle b = intent.getExtras();   

String name = b.getString("name");   

int age = b.getInt("age");

//傳遞方:put,接收方:get

6.URI詳解

 URI:資料資源位址;    

content://com.qaa.superbrowser/ad/table1/1    

URL:http://www.baidu.com/image/1.jpg

7.開啟activity擷取傳回值(重點)

  從第一個界面跳轉到第二個界面,當第二界面關閉的時候傳回給第一個界面一些資料。

  步驟:

 1.建立一個顯示意圖,使用startActivityForResult方法開啟目标activity:   

Intent intent = new Intent(this,SecondActivity.class);      

//開啟目标activity,并期望目标activity關閉的時候傳回一個結果資料   

startActivityForResult(intent, 0);

 2.在目标activity中設定傳回資料,并關閉界面:   

Intent intent = new Intent();   

intent.putExtra("news", "我是第二個界面傳回的額資料");      

//設定傳回的資料,在目前界面關閉的時候才會調用這個方法   

setResult(100, intent);   

//關閉目前界面   

finish();       

3.在調用者activity中重寫onActivityResult方法接收目标activity傳回的資料:   

@Override   

protected void onActivityResult(int requestCode, int resultCode, Intent data)

{    

super.onActivityResult(requestCode, resultCode, data);        

//接收目标activity傳回的資料    

String news = data.getStringExtra("news");    

//使用請求碼區分目前資料是從哪個業務邏輯界面傳回的    

switch (requestCode) {    

case 0:     

Toast.makeText(this, news, 0).show();     

break;    

case 1:     

Toast.makeText(this, news, 0).show();     

break;    

}   

}

8.請求碼和結果碼的作用(重點)

 用來判斷目前資料是從哪個業務邏輯界面傳回的。

9.activity的生命周期(重點)

 人的生命周期:被出生、幼年、童年、少年、青年、中年、老年。

Activity的生命周期(重點):7個

onCreate:初始化    

onStart:開始    

onResume:界面可見    

onPause:暫停,界面不可見    

onRestart:重新開始    

onStop:停止    

onDestroy:銷毀

1.打開一個界面:onCreate、onStart、onResume;  

2.最小化一個界面:onPause、onStop;  

3.重新打開被最小化的界面:onRestart、onStart、onResume;  

4.關閉一個界面:onPause、onStop、onDestroy;    

10.橫豎屏切換的生命周期(重點)

 橫豎屏切換的生命周期變化:先關閉前一個界面,再打開一個新的界面。

 固定橫豎屏的方法:

android:screenOrientation="portrait"

常見的類型:portrait豎屏、landscape橫屏、sensor感應器類型 可以橫豎屏自适應,預設是這個類型。

11.任務棧的概念

 隊列:先進先出;  

棧:先進後出;    

任務:要做一件事情;在Android中對應了一個打開的activity執行個體。    

任務棧:存儲任務的棧;

打開一個界面時,就會有一個任務壓入棧中;    

關閉一個界面時,就會從任務棧中清除一個任務;    

當應用程式的界面都關閉的時候,任務棧就被清空了,說明應用程式也退出了;

 任務棧啟動模式:

 standar:标準模式,每打開一個界面都會建立一個執行個體放入任務棧中;      

singleTop:單一頂部模式,

12.singletop啟動模式

 singletop 單一頂部模式

在activity的配置檔案中設定

android:launchMode="singleTop"  如果任務棧的棧頂存在這個要開啟的activity,不會重新的建立activity,而是複用已經存在的activity。保證棧頂如果存在,不會重複建立。  應用場景:浏覽器的書簽

13.singletask和singleinstance啟動模式

 singetask:單一任務棧,在目前任務棧裡面隻能有一個執行個體存在,應用于Activity獨立的運作。

當開啟activity的時候,就去檢查在任務棧裡面是否有執行個體已經存在,如果有執行個體存在就複用這個已經存在的activity,并且把這個activity上面的所有的别的activity都清空,複用這個已經存在的activity。保證整個任務棧裡面隻有一個執行個體存在      

應用場景:浏覽器的activity  

如果一個activity的建立需要占用大量的系統資源(cpu,記憶體)一般配置這個activity為singletask的啟動模式。webkit核心 c代碼

 singleInstance啟動模式非常特殊, activity會運作在自己的任務棧裡面,并且這個任務棧裡面隻有一個執行個體存在  如果你要保證一個activity在整個手機作業系統裡面隻有一個執行個體存在,使用singleInstance  應用場景: 電話撥打界面

14.幀動畫    

幀動畫(Drawable Animation):把一組有序的圖檔,一幀一幀的去播放,這個變化過程;

代碼(參考開發文檔):

 xml檔案:

<?xml version="1.0" encoding="utf-8"?>  

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"    

android:oneshot="false"      >

<item        

android:drawable="@drawable/girl_1"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_2"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_3"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_4"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_5"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_6"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_7"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_6"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_7"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_6"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_7"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_8"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_9"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_10"        

android:duration="200"/>    

<item        

android:drawable="@drawable/girl_11"        

android:duration="200"/>

 </animation-list>

轉載于:https://www.cnblogs.com/kingqinwang/p/5123452.html

繼續閱讀