1. 程式人生 > >Android Intent機制詳解

Android Intent機制詳解

什麼是Intent

 Intent 是一個將要執行的動作的抽象描述,一般來說是作為引數來使用,由Intent來協助完成android各個元件之間的通訊。比如說呼叫startActivity()來啟動一個activity,或者由broadcaseIntent()來傳遞給所有感興趣的BroadcaseReceiver, 再或者由startService()/bindservice()來啟動一個後臺的service.所以可以看出來,intent主要是用來啟動其他的activity 或者service,所以可以將intent理解成activity之間的粘合劑。

Intent是一種執行時繫結(run-time binding)機制,它能在程式執行過程中連線兩個不同的元件。通過Intent,你的程式可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的元件來完成請求。比如,有一個Activity希望開啟網頁瀏覽器檢視某一網頁的內容,那麼這個Activity只需要發出WEB_SEARCH_ACTION給Android,Android就會根據Intent的請求內容,查詢各元件註冊時宣告的IntentFilter,找到網頁瀏覽器的Activity來瀏覽網頁。

Android的三個基本元件——Activity,Service和Broadcast Receiver——都是通過Intent機制啟用的,不同型別的元件有不同的傳遞Intent方式:

1.1 要啟用一個新的Activity,或者讓一個現有的Activity做新的操作,可以通過呼叫Context.startActivity()或者Activity.startActivityForResult()方法。

1.2 要啟動一個新的Service,或者向一個已有的Service傳遞新的指令,呼叫Context.startService()方法或者呼叫Context.bindService()方法將呼叫此方法的上下文物件與Service繫結。

1.3 Context.sendBroadcast()、Context.sendOrderBroadcast()、Context.sendStickBroadcast()這三個方法可以傳送Broadcast Intent。傳送之後,所有已註冊的並且擁有與之相匹配IntentFilter的BroadcastReceiver就會被啟用。

Intent一旦發出,Android都會準確找到相匹配的一個或多個Activity,Service或者BroadcastReceiver作響應。所以,不同型別的Intent訊息不會出現重疊,即Broadcast的Intent訊息只會傳送給BroadcastReceiver,而決不會發送給Activity或者Service。由startActivity()傳遞的訊息也只會發給Activity,由startService()傳遞的Intent只會傳送給Service。

Intent的構成


要在不同的activity之間傳遞資料,就要在intent中包含相應的內容,一般來說資料中最基本的應該包括:


Action:用來指明要實施的動作是什麼,比如說ACTION_VIEW, ACTION_EDIT等。具體的可以查閱android SDK-> reference中的Android.content.intent類,裡面的constants中定義了所有的action。

當日常生活中,描述一個意願或願望的時候,總是有一個動詞在其中。比如:我想 三個俯臥撐;我要 一部x片;我要 一部血淚史,之類云云。在Intent中,Action就是描述看、做、寫等動作的,當你指明瞭一個Action,執行者就會依照這個動作的指示,接受相關輸入,表現對應行為,產生符合的輸出。在Intent類中,定義了一批量的動作,比如ACTION_VIEWACTION_PICK ,之類的,基本涵蓋了常用動作,整一個降龍十八掌全集。

一些常用的Action:


ACTION_CALL activity 啟動一個電話.
ACTION_EDIT activity 顯示使用者編輯的資料.
ACTION_MAIN activity 作為Task中第一個Activity啟動
ACTION_SYNC activity 同步手機與資料伺服器上的資料.
ACTION_BATTERY_LOW broadcast receiver 電池電量過低警告.
ACTION_HEADSET_PLUG broadcast receiver 插拔耳機警告
ACTION_SCREEN_ON broadcast receiver 螢幕變亮警告.
ACTION_TIMEZONE_CHANGED broadcast receiver 改變時區警告.

Data: 要事實的具體的資料,一般由一個Uri變數來表示

Category:一個字串,包含了關於處理該intent的元件的種類的資訊。一個intent物件可以有任意個category。intent類定義了許多category常數.

addCategory()方法為一個intent物件增加一個category,
removeCategory刪除一個category,
getCategories()獲取intent所有的category.

Type:顯式指定Intent的資料型別(MIME)(多用途網際網路郵件擴充套件,Multipurpose Internet Mail Extensions)。比如,一個元件是可以顯示圖片資料的而不能播放聲音檔案。很多情況下,data型別可在URI中找到,比如content:開頭的URI,表明資料由裝置上的content provider提供。但是通過設定這個屬性,可以強制採用顯式指定的型別而不再進行推導。

MIME型別有2種形式


1.1  單個記錄的格式: vnd.android.cursor.item/vnd.yourcompanyname.contenttype,如:content://com.example.transportationprovider/trains/122(一條列車資訊的uri)的MIME型別是vnd.android.cursor.item/vnd.example.rail

1.2 多個記錄的格式:vnd.android.cursor.dir/vnd.yourcompanyname.contenttype,如:content://com.example.transportationprovider/trains (所有列車資訊)的MIME型別是vnd.android.cursor.dir/vnd.example.rail

component:指定Intent的目標元件的類名稱。通常 Android會根據Intent 中包含的其它屬性的資訊,比如action、data/type、category進行查詢,最終找到一個與之匹配的目標元件。但是,如果 component這個屬性有指定的話,將直接使用它指定的元件,而不再執行上述查詢過程。指定了這個屬性以後,Intent的其它所有屬性都是可選的。例如:

Intent it = new Intent(Activity.Main.this, Activity2.class); startActivity(it);

startActivity(it);

extras:附加資訊,例如ACTION_TIMEZONE_CHANGED的intent有一個"time-zone"附加資訊來指明新的時區,而ACTION_HEADSET_PLUG有一個“state”附加資訊來指示耳機是被插入還是被拔出。intent物件有一系列put...()和set...()方法來設定和獲取附加資訊。 這些方法和Bundle物件很像。事實上附加資訊可以使用putExtras()和getExtras()作為Bundle來讀和寫。例如:

//用Bundle傳遞資料 Intent it = new Intent(Activity.Main.this, Activity2.class); Bundle bundle=new Bundle(); bundle.putString("name", "This is from MainActivity!"); it.putExtras(bundle); startActivity(it); //獲得資料 Bundle bundle=getIntent().getExtras(); String name=bundle.getString("name");

intent的解析:

在應用中,我們可以以兩種形式來使用Intent:


1.1 顯式Intent:指定了component屬性的Intent(呼叫setComponent(ComponentName)或者setClass(Context, Class)來指定)。通過指定具體的元件類,通知應用啟動對應的元件。

2.2 隱式Intent:沒有指定comonent屬性的Intent。這些Intent需要包含足夠的資訊,這樣系統才能根據這些資訊,在在所有的可用元件中,確定滿足此Intent的元件。
對於直接Intent,Android不需要去做解析,因為目標元件已經很明確,Android需要解析的是那些間接Intent,通過解析將 Intent對映給可以處理此Intent的Activity、Service或Broadcast Receiver。

下面,以Android SDK中的便箋例子來說明,Intent如何定義及如何被解析。這個應用可以讓使用者瀏覽便箋列表、檢視每一個便箋的詳細資訊。

Manifest.xml

Xml程式碼  收藏程式碼
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
  2. package="com.google.android.notepad">   
  3.     <application android:icon="@drawable/app_notes"   
  4. android:label="@string/app_name">   
  5.     <provider class="NotePadProvider"   
  6. android:authorities="com.google.provider.NotePad" />   
  7.     <activity class=".NotesList"="@string/title_notes_list">   
  8.       <intent-filter>   
  9.         <action android:value="android.intent.action.MAIN"/>   
  10.         <category android:value="android.intent.category.LAUNCHER" />   
  11.       </intent-filter>   
  12.       <intent-filter>   
  13.         <action android:value="android.intent.action.VIEW"/>   
  14.         <action android:value="android.intent.action.EDIT"/>   
  15.         <action android:value="android.intent.action.PICK"/>   
  16.         <category android:value="android.intent.category.DEFAULT" />   
  17.         <type android:value="vnd.android.cursor.dir/vnd.google.note" />   
  18.       </intent-filter>   
  19.       <intent-filter>   
  20.         <action android:value="android.intent.action.GET_CONTENT" />   
  21.         <category android:value="android.intent.category.DEFAULT" />   
  22.         <type android:value="vnd.android.cursor.item/vnd.google.note" />   
  23.       </intent-filter>   
  24.     </activity>   
  25.     <activity class=".NoteEditor"="@string/title_note">   
  26.       <intent-filter android:label="@string/resolve_edit">   
  27.         <action android:value="android.intent.action.VIEW"/>   
  28.         <action android:value="android.intent.action.EDIT"/>   
  29.         <category android:value="android.intent.category.DEFAULT" />   
  30.         <type android:value="vnd.android.cursor.item/vnd.google.note" />   
  31.       </intent-filter>   
  32.       <intent-filter>   
  33.         <action android:value="android.intent.action.INSERT"/>   
  34.         <category android:value="android.intent.category.DEFAULT" />   
  35.         <type android:value="vnd.android.cursor.dir/vnd.google.note" />   
  36.       </intent-filter>   
  37.     </activity>   
  38.     <activity class=".TitleEditor"="@string/title_edit_title"   
  39. android:theme="@android:style/Theme.Dialog">   
  40.       <intent-filter android:label="@string/resolve_title">   
  41.         <action android:value="com.google.android.notepad.action.EDIT_TITLE"/>   
  42.         <category android:value="android.intent.category.DEFAULT" />   
  43.         <category android:value="android.intent.category.ALTERNATIVE" />   
  44.         <category android:value="android.intent.category.SELECTED_ALTERNATIVE"/>   
  45.         <type android:value="vnd.android.cursor.item/vnd.google.note" />   
  46.       </intent-filter>   
  47.     </activity>   
  48. </application>   
  49. </manifest>  

 

例子中的第一個Activity 是com.google.android.notepad.NotesList,它是應用的主入口,提供了三個功能,分別由三個 intent-filter進行描述:
        1、第一個是進入便箋應用的頂級入口(action為android.app.action.MAIN)。型別為android.app.category.LAUNCHER表明這個Activity將在Launcher中列出。
        2、第二個是,當type為vnd.android.cursor.dir/vnd.google.note(儲存便箋記錄的目錄) 時,可以檢視可用的便箋(action為android.app.action.VIEW),或者讓使用者選擇一個便箋並返回給呼叫者(action為 android.app.action.PICK)。
        3、第三個是,當type為vnd.android.cursor.item/vnd.google.note時,返回給呼叫者一個使用者選擇的便箋(action為android.app.action.GET_CONTENT),而使用者卻不需要知道便箋從哪裡讀取的。 有了這些功能,下面的Intent就會被解析到NotesList這個activity:

    * { action=android.app.action.MAIN }:與此Intent匹配的Activity,將會被當作進入應用的頂級入口。 

    * { action=android.app.action.MAIN, category=android.app.category.LAUNCHER }:這是目前Launcher實際使用的 Intent,用於生成Launcher的頂級列表。 

    * { action=android.app.action.VIEW data=content://com.google.provider.NotePad/notes }:顯示"content://com.google.provider.NotePad/notes"下的所有便箋的列表,使用者可以遍歷列表,並且察看某便箋的詳細資訊。 

    * { action=android.app.action.PICK data=content://com.google.provider.NotePad/notes }:顯示"content://com.google.provider.NotePad/notes"下的便箋列表,讓使用者可以在列表中選擇一個,然後將選擇的便箋的 URL返回給呼叫者。 

    * { action=android.app.action.GET_CONTENT type=vnd.android.cursor.item/vnd.google.note }:和 上面的action為pick的Intent類似,不同的是這個Intent允許呼叫者(在這裡指要呼叫NotesList的某個Activity)指定 它們需要返回的資料型別,系統會根據這個資料型別查詢合適的 Activity(在這裡系統會找到NotesList這個Activity),供使用者選擇便箋。 


        第二個Activity是com.google.android.notepad.NoteEditor,它為使用者顯示一條便箋,並且允許 使用者修改這個便箋。它定義了兩個intent-filter,所以具有兩個功能。第一個功能是,當資料型別為 vnd.android.cursor.item/vnd.google.note時,允許使用者檢視和修改一個便籤(action為 android.app.action.VIEW和android.app.action.EDIT)。第二個功能是,當資料型別為 vnd.android.cursor.dir/vnd.google.note,為呼叫者顯示一個新建便箋的介面,並將新建的便箋插 入到便箋列表中(action為android.app.action.INSERT)。

      有了這兩個功能,下面的Intent就會被解析到NoteEditor這個activity:

    * { action=android.app.action.VIEW data=content://com.google.provider.NotePad/notes/{ID} } :向用戶顯示標識為 ID的便箋。

    * { action=android.app.action.EDIT data=content://com.google.provider.NotePad/notes/{ID} }:允許使用者編輯標識為ID的便箋。 

    * { action=android.app.action.INSERT data=content://com.google.provider.NotePad/notes }:在“content://com.google.provider.NotePad/notes”這個便箋列表中建立一個新的空便箋,並允許用 戶編輯這個便籤。當用戶儲存這個便箋後,這個新便箋的URI將會返回給呼叫者。 


        最後一個Activity是com.google.android.notepad.TitleEditor,它允許使用者編輯便箋的標題。它可以被實現為 一個應用可以直接呼叫(在Intent中明確設定component屬性)的類,不過這裡我們將為你提供一個在現有的資料上釋出可選操作的方法。在這個 Activity的唯一的intent-filter中,擁有一個私有的action: com.google.android.notepad.action.EDIT_TITLE,表明允許使用者編輯便箋的標題。和前面的view和edit 動作一樣,呼叫這個Intent 的時候,也必須指定具體的便箋(type為vnd.android.cursor.item/vnd.google.note)。不同的是,這裡顯示和編 輯的只是便箋資料中的標題。
      除了支援預設類別(android.intent.category.DEFAULT),標題編輯器還支援另外兩個標準類別: android.intent.category.ALTERNATIVE和 android.intent.category.SELECTED_ALTERNATIVE。實現了這兩個類別之後,其它 Activity就可以呼叫queryIntentActivityOptions(ComponentName, Intent[], Intent, int)查詢這個Activity提供的action,而不需要了解它的具體實現;或者呼叫addIntentOptions(int, int, ComponentName, Intent[], Intent, int, Menu.Item[])建立動態選單。需要說明的是,在這個intent-filter中有一個明確的名稱(通過android:label= "@string/resolve_title"指定),在使用者瀏覽資料的時候,如果這個Activity是資料的一個可選操作,指定明確的名稱可以為用 戶提供一個更好控制介面。
      有了這個功能,下面的Intent就會被解析到TitleEditor這個Activity:

    * { action=com.google.android.notepad.action.EDIT_TITLE data=content://com.google.provider.NotePad/notes/{ID} }:顯示並且允許使用者編輯標識為ID的便箋的標題。


Intent解析機制

Intent解析機制主要是通過查詢已註冊在AndroidManifest.xml中的所有<intent-filter>及其中定義的Intent,通過PackageManager(注:PackageManager能夠得到當前裝置上所安裝的
application package的資訊)來查詢能處理這個Intent的component。在這個解析過程中,Android是通過Intent的action、type、category這三個屬性來進行判斷的,判斷方法如下:
1.1  如果Intent指明定了action,則目標元件的IntentFilter的action列表中就必須包含有這個action,否則不能匹配;
1.2  如果Intent沒有提供type,系統將從data中得到資料型別。和action一樣,目標元件的資料型別列表中必須包含Intent的資料型別,否則不能匹配。
1.3  如果Intent中的資料不是content:型別的URI,而且Intent也沒有明確指定type,將根據Intent中資料的scheme(比如 http:或者mailto:)進行匹配。同上,Intent 的scheme必須出現在目標元件的scheme列表中。
1.4 如果Intent指定了一個或多個category,這些類別必須全部出現在組建的類別列表中。比如Intent中包含了兩個類別:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目標元件必須至少包含這兩個類別。

Intent是不同元件之間相互通訊的紐帶,封裝了不同元件之間通訊的條件。Intent本身是定義為一個類別(Class),一個Intent物件表達一個目的(Goal)或期望(Expectation),敘述其所期望的服務或動作、與動作有關的資料等。Android則根據此Intent物件之敘述,負責配對,找出相配的元件,然後將 Intent物件傳遞給所找到的元件,Android的媒婆任務就完成了。

在Google Doc中是這樣描述Intent的(摘自Android中文翻譯組)
當接收到ContentResolver發出的請求後,內容提供者被啟用。而其它三種元件──activity、服務和廣播接收器被一種叫做intent的非同步訊息所啟用。intent是一個儲存著訊息內容的Intent對 象。對於activity和服務來說,它指明瞭請求的操作名稱以及作為操作物件的資料的URI和其它一些資訊。比如說,它可以承載對一個activity 的請求,讓它為使用者顯示一張圖片,或者讓使用者編輯一些文字。而對於廣播接收器而言,Intent物件指明瞭宣告的行為。比如,它可以對所有感興趣的物件聲 明照相按鈕被按下。

對於每種元件來說,啟用的方法是不同的:
1.通過傳遞一個Intent物件至 Context.startActivity()或Activity.startActivityForResult()以載入(或指定新工作給)一個activity。相應的activity可以通過呼叫 getIntent() 方法來檢視啟用它的intent。Android通過呼叫activity的onNewIntent()方法來傳遞給它繼發的intent。

一個activity經常啟動了下一個。如果它期望它所啟動的那個activity返回一個結果,它會以呼叫startActivityForResult()來取代startActivity()。比如說,如果它啟動了另外一個activity以使使用者挑選一張照片,它也許想知道哪張照片被選中了。結果將會被封裝在一個Intent物件中,並傳遞給發出呼叫的activity的onActivityResult() 方法。

2.通過傳遞一個Intent物件至Context.startService()將啟動一個服務(或給予正在執行的服務以一個新的指令)。Android呼叫服務的onStart()方法並將Intent物件傳遞給它。

與此類似,一個Intent可以被呼叫元件傳遞給 Context.bindService()以獲取一個正在執行的目標服務的連線。這個服務會經由onBind() 方法的呼叫獲取這個Intent物件(如果服務尚未啟動,bindService()會先啟動它)。比如說,一個activity可以連線至前述的音樂回放服務,並提供給使用者一個可操作的(使用者介面)以對回放進行控制。這個activity可以呼叫 bindService() 來建立連線,然後呼叫服務中定義的物件來影響回放。

3.應用程式可以憑藉將Intent物件傳遞給 Context.sendBroadcast() ,Context.sendOrderedBroadcast(), 以及Context.sendStickyBroadcast()和其它類似方法來產生一個廣播。Android會呼叫所有對此廣播有興趣的廣播接收器的 onReceive()方法將intent傳遞給它們。

Intent物件包含的內容

在Intent類的Java原始碼中定義了Intent相關內容的變數,如下:

  1. // Action
  2. private String mAction;  
  3. // Data
  4. private Uri mData;  
  5. private String mType;  
  6. private String mPackage;  
  7. // ComponentName
  8. private ComponentName mComponent;  
  9. // Flag
  10. privateint mFlags;  
  11. // category
  12. private HashSet<String> mCategories;  
  13. // extras
  14. private Bundle mExtras;  

1.componentName(元件名稱),指定Intent的目標元件的類名稱。元件名稱是可選的,如果填寫,Intent物件會發送給指定元件名稱的元件,否則也可以通過其他Intent資訊定位到適合的元件。元件名稱是個ComponentName型別的物件。
用法:

  1. Intent intent = new Intent();  
  2. // 構造的引數為當前Context和目標元件的類路徑名
  3. ComponentName cn = new ComponentName(HelloActivity.this"com.byread.activity.OtherActivity");  
  4. intent.setComponent(cn);  
  5. startActivity(intent);  
相當於以下常用方法:
  1. Intent intent = new Intent();  
  2. intent.setClass(HelloActivity.this, OtherActivity.class);  
  3. startActivity(intent);  

Intent類中也包含一個初始化ComponentName的建構函式: 

  1. public Intent(Context packageContext, Class<?> cls) {  
  2.     mComponent = new ComponentName(packageContext, cls);  
  3. }  

2.action(動作),指定Intent的執行動作,比如呼叫撥打電話元件。 

  1. public Intent(String action) {  
  2.     mAction = action;  
  3. 相關推薦

    Android Intent機制

    什麼是Intent  Intent 是一個將要執行的動作的抽象描述,一般來說是作為引數來使用,由Intent來協助完成android各個元件之間的通訊。比如說呼叫startActivity()來啟動一個activity,或者由broadcaseIntent()來傳遞給

    Android總結篇——Intent機制及示例總結

    ets mp3 pro domain 一般來說 ssa star wrap 無線 一.Intent介紹: Intent的中文意思是“意圖,意向”,在Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動 作、動作涉及

    Android筆記02:Intent機制

    tar 中一 定義 tty 一段 AI new 例如 pac 一、什麽是Intent? Intent在Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的

    androidIntent機制

    Intent是一種執行時繫結(run-time binding)機制,它能在程式執行過程中連線兩個不同的元件。如實現兩個activity之間的連線很資料通訊 Intent it = new Intent(Activity1.this, Activity2.class);

    Android快取機制之硬碟快取DiskLruCache

    簡介 防止多圖OOM的核心解決思路就是使用LruCache技術。但LruCache只是管理了記憶體中圖片的儲存與釋放,如果圖片從記憶體中被移除的話,那麼又需要從網路上重新載入一次圖片,這顯然非常耗時。對此,Google又提供了一套硬碟快取的解決方案:DiskLruCache(非Google官方編

    Android-Handler機制

    Handler 1、handler是什麼? 答:handler 是更新UI介面的機制,也是訊息處理的機制,我們可以傳送訊息,也可以處理訊息 2、為什麼要有Handler? 答:Android在設計的時候,封裝了一套訊息建立,傳遞,處理機制,如果不遵循這樣的機制就沒法更新UI資訊,就會丟擲

    【資料篇】Android混淆機制學習資料

    您將獲得以下內容: 通過 Gradle 編譯 Debug 和 Release 包的方式和介紹; 如何對程式碼進行混淆; Proguard 的特性介紹; Proguard 和 Dexguard 的區別;

    Android 廣播機制

    一、廣播的簡介 首先,當我們一聽到廣播這個詞時。就可以想到小學是教室的廣播。不錯Android中的廣播機制與我們生活中的廣播是有異曲同工之妙的。Android中的傳送廣播也就像廣播室播廣播,可以讓很多註冊過廣播的地方收到這條廣播。接下來我們對其進行分析。 二、廣播的傳送 廣播的傳

    Android Binder機制:手寫IPC通訊

    想要掌握一樣東西,最好的方式就是閱讀理解它的原始碼。想要掌握Android Binder,最好的方式就是寫一個AIDL檔案,然後檢視其生成的程式碼。本文的思路也是來自於此。 簡介 Binder是Android常用的一種程序間通訊方式。當然,不使用Binder,你還可以使用Socket甚至檔案來進行通訊。

    Linux與android程序間的通訊及android Binder機制

    關於程序之間的通訊又很多種方式,不同的方式適用於不同的場景。 五種不同形式的IPC形式 1.訊息傳遞(管道,FIFO和訊息佇列) 2.同步(互斥量,條件變數,讀寫鎖,檔案和記錄鎖,訊號量) 3.共享記憶體(匿名的和具名的) 4.遠端過程呼叫(Solaris門和Sun R

    Android-Handler機制並自定義Handler

    之前研究過Android的Handler機制,但是一直沒有機會自己實現一次。最近又看到這個Handler機制,於是決定自己實現以下這個Handler機制。 首先,簡單介紹以下Handler機制。 Handler機制在Android中通常用來更新UI:子執行緒

    Android Intent用法

    如果是從BroadcastReceiver 啟動一個新的Activity , 不要忘記i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);public class MyReceiver extends BroadcastReceiver{ pu

    Android IPC 機制:IBinder

    http://www.linuxgraphics.cn/android/ipc_ibinder.html IBinder 介面 IBinder介面是對跨程序的物件的抽象。普通物件在當前程序可以訪問,如果希望物件能被其它程序訪問,那就必須實現IBinder介面。IBinde

    Android零基礎入門第80節:Intent 屬性(下)

    gre save top log 單選按鈕 bar 手機 彩信 ttext 上一期學習了Intent的前三個屬性,本期接著學習其余四個屬性,以及Android系統常用內置組件的啟動。 四、Data和Type屬性 Data屬性通常用於向Action屬性提

    Android開發——事件分發機制---微信魚蝦蟹源碼搭建

    lai reset 微信 影響 ren 事件分發機制 lis forum hlist 轉載請註明出處:http://h5.hxforum.com深入學習事件分發機制,是為了解決在Android開發中遇到的滑動沖突問題做準備。事件分發機制描述了用戶的手勢一系列事件是如何被An

    Android的so檔案載入機制

    今日科技快訊 10月30日,小米集團跌超4%,再創上市以來新低,市值下破2600億港元關口。此前,財政部發布的《2018年會計資訊質量檢查公告》顯示,在2017年度會計執法檢查中發現,部分企業跨境轉移利潤、逃避繳納稅收等問題比較突出。在被點名的網際網路企業中,就包括

    Android非同步訊息處理機制及原始碼分析

    PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊! 【工匠若水 http://blog.csdn.net/yanbober 轉載煩請註明出處,尊重分享成果】 最近相對來說比較閒,加上養病,所

    Android事件分發機制

    概述   眾所周知,Android事件分發機制是Android知識體系中的重點也是難點。說白了,要學好Android,事件分發機制是無論如何也繞不過去的。   也許你會問,Android事件分發機制那麼重要,我怎麼沒用過呢?   當你被不同item的側滑刪除衝突

    Android觸控式螢幕事件派發機制與原始碼分析三(Activity篇)

    PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊! 【工匠若水 http://blog.csdn.net/yanbober】 該篇承接上一篇《Android觸控式螢幕事件派發機制詳解與原始碼分析

    Android觸控式螢幕事件派發機制與原始碼分析二(ViewGroup篇)

    【工匠若水 http://blog.csdn.net/yanbober】 該篇承接上一篇《Android觸控式螢幕事件派發機制詳解與原始碼分析一(View篇)》,閱讀本篇之前建議先閱讀。當然,閱讀完這一篇之後可以閱讀繼續進階的下一篇《Android觸控式螢幕事件派發機制詳解與原始碼