編輯:關於Android編程
在讀罷他人的博客之後,自己對Intent的整理如下:
首先說自己的心得:Intent實現了解耦;
一:Intent是”目的,意圖”,主要用來在組件之間實現通信。具體而言:
1.Android中提供了Intent機制來協助應用間的交互與通訊,或者采用更准確的說法是,Intent不僅可用於應用程序之間,也可用於應用程序內部的activity, service和broadcast receiver之間的交互。
2.Intent是一種運行時綁定(runtime binding)機制,它能在程序運行的過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的組件來響應。
3.activity、service和broadcast receiver之間是通過Intent進行通信的,而另外一個組件Content Provider本身就是一種通信機制,不需要通過Intent。
二:關於Intent實現三大組件之間的通信:
1.使用Context.startActivity() 或 Activity.startActivityForResult(),傳入一個intent來啟動一個activity。使用 Activity.setResult(),傳入一個intent來從activity中返回結果。
2.將intent對象傳給Context.startService()來啟動一個service或者傳消息給一個運行的service。將intent對象傳給 Context.bindService()來綁定一個service。
3.將intent對象傳給 Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等廣播方法,則它們被傳給 broadcast receiver。
三:intent的七大屬性:
1.component(組件):目的組件
2.action(動作):用來表現意圖的行動
3.category(類別):用來表現動作的類別
4.data(數據):表示與動作要操縱的數據
5.type(數據類型):對於data范例的描寫
6.extras(擴展信息):擴展信息
7.Flags(標志位):期望這個意圖的運行模式
Intent類型分為顯式Intent(直接類型)、隱式Intent(間接類型)。谷歌官方建議使用隱式Intent。上述屬性中,component屬性為直接類型,其他均為間接類型。
下面詳細介紹用Intent的屬性來啟動Activity的過程:
四:
1.Component屬性明確指定Intent的目標組件的類名稱。(屬於直接Intent)
如果 component這個屬性有指定的話,將直接使用它指定的組件。指定了這個屬性以後,Intent的其它所有屬性都是可選的。
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //創建一個意圖對象 Intent intent = new Intent(); //創建組件,通過組件來響應 ComponentName component = new ComponentName(MainActivity.this, SecondActivity.class); intent.setComponent(component); startActivity(intent); } });
簡單的寫法如下:
Intent intent=new Intent(); intent.setClass(MainActivity.this,GuideActivity.class); startActivity(intent);
或者:
Intent intent=new Intent(MainActivity.this,GuideActivity.class); startActivity(intent);
2.通過Action和category來啟動Activity.Action必須與Category來一起使用來啟動組件:
在清單文件中配置:
在代碼中設置:
intent.setAction("myGuideActivity"); startActivity(intent);
來啟動Activity
3.data(數據):表示與動作要操縱的數據 :
Data是用一個uri對象來表示的,uri代表數據的地址,屬於一種標識符。通常情況下,我們使用action+data屬性的組合來描述一個意圖:做什麼
使用隱式Intent,我們不僅可以啟動自己程序內的活動,還可以啟動其他程序的活動,這使得Android多個應用程序之間的功能共享成為了可能。比如應用程序中需要展示一個網頁:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri data = Uri.parse("http://www.baidu.com"); intent.setData(data); startActivity(intent); } });
其中指定了Intent的action是 Intent.ACTION_VIEW,表示查看的意思,這是一個Android系統內置的動作
4.extras(擴展信息):擴展信息是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,比如,如果要執行“發送電子郵件”這個動作,可以將電子郵件的標題、正文等保存在extras裡,傳給電子郵件發送組件。
5.type(數據類型):對於data范例的描寫
如果Intent對象中既包含Uri又包含Type,那麼,在中也必須二者都包含才能通過測試。Type屬性用於明確指定Data屬性的數據類型或MIME類型,但是通常來說,當Intent不指定Data屬性時,Type屬性才會起作用,否則Android系統將會根據Data屬性值來分析數據的類型,所以無需指定Type屬性。data和type屬性一般只需要一個,通過setData方法會把type屬性設置為null,相反設置setType方法會把data設置為null,如果想要兩個屬性同時設置,要使用Intent.setDataAndType()方法。
6.Flags(標志位):期望這個意圖的運行模式,一個程序啟動後系統會為這個程序分配一個task供其使用,另外同一個task裡面可以擁有不同應用程序的activity。那麼,同一個程序能不能擁有多個task?這就涉及到加載activity的啟動模式,這個需要單獨講一下。
注:android中一組邏輯上在一起的activity被叫做task,自己認為可以理解成一個activity堆棧。
Android與Unity交互研究 Android與Unity交互研究 unity與android交互的由來 unity簡單介紹 unity與android交互
Android 開發中對話框隨處可見,現將自己做過的項目中的Dialog,做出一個系統的總結。從以下方面開始總結:1.AlertDialog的使用2.Dialog的使用3
跨進程調用Service(AIDL Service) Android系統中的進程之間不能共享內存,因此,需要提供一些機制在不同進程之間進行數據通信。
Android之屏幕適配Android之屏幕適配 適配方式一圖片適配 適配方式二dimensxml文件適配 適配方式三布局文件適配 適配方式四java代碼適配 適配方式五