android中的顯式和隱式活動調用有什麼區別?如果你用一個簡單的例子來解釋答案會很好。android中的顯式和隱式活動調用有什麼不同?
回答
例如:
隱活動通話
在意圖過濾器創建行動,你的活動,所以其他應用程序可以通過這個動作叫你的活動如下:
<activity android:name=".BrowserActivitiy" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"/>
</intent-filter>
</activity>
另一種稱爲隱式意圖的方式如下:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);
顯式調用活動
您撥打一個電話,指示到底哪個活動類:
Intent intent = new Intent(this, ActivityABC.class);
i.putExtra("Value", "This value for ActivityABC");
startActivity(intent);
希望這有助於你瞭解Android的更多顯式和隱活動通話。
你可以得到關於Android意向here
看到這裏意向分辨率
http://developer.android.com/guide/topics/intents/intents-filters.html
明確意圖(活動)是指一個特定的類,並且在一般情況下,只提供給你的包。隱含意圖是指應用程序公開宣佈他們可以處理某些類型的數據或可以提供特定服務的意圖過濾器。發送電子郵件。對於隱含的意圖,用戶選擇使用哪個活動(通常是一個包)來處理意圖,或者如果設置了默認處理程序,則啓動它。
- 顯式意圖有更詳細的用於調用特定的組件。當您知道要啓動哪個組件時,並且不想讓用戶自由控制要使用哪個組件。例如,您有一個具有2個活動的應用程序。活動A和活動B.您想從活動A啓動活動B.在這種情況下,您可以定義明確的目標活動B,然後使用它直接調用它。
- 當你知道你想要做什麼時,使用隱式意圖,但是你不知道應該啓動哪個組件。或者如果您想讓用戶在要使用的組件列表中進行選擇的選項。如果這些Intents被髮送到Android系統,它將搜索爲特定操作和數據類型註冊的所有組件。如果只找到一個組件,Android會直接啓動組件。例如,您有一個使用相機拍攝照片的應用程序。您的應用程序的一個特點是,您可以讓用戶發送他拍攝的照片。您不知道用戶具有哪種可以發送照片的應用程序,並且您還想讓用戶選擇使用哪個外部應用程序(如果他有多個應用程序)。在這種情況下,你不會使用明確的意圖。相反,您應該使用隱式意圖,將其操作設置爲ACTION_SEND,並將其數據額外設置爲照片的URI。
明確的意圖總是傳遞給它的目標,不管它包含了什麼;沒有諮詢過濾器。但是一個隱含的意圖傳遞到一個組件,只有當它能夠通過組件的一個過濾器
有兩種類型的意圖的:
明確意圖:
在創建一個意圖對象我們明確指定並直接在目標組件名稱上傳遞,這是一個明確的意圖。
隱性意圖:
在這種情況下,我們委託評估註冊組件(註冊通常是使用我們稍後會介紹的意圖過濾器完成)的任務是基於Android的意圖數據和(如發送電子郵件,捕獲照片,在地圖上鎖定位置等)。所以Android會自動啓動相同的應用程序或其他可以處理意圖消息/作業的應用程序的組件。這種情況下的想法是,假設我們必須在地圖上固定一個位置,因爲我們不必編寫自己的活動來處理該位置。相反,只需將位置數據傳遞給像谷歌地圖這樣的應用程序,即可代表我們的應用程序完成這項工作。
何時使用哪個?
明確意圖:當您知道哪個組件可以處理您的請求。所以你在意圖中明確提到組件名稱。
Intent i = new Intent(context,DetailActivity.class); // DetailActivity.class is the component name
startActivity(i);
隱含的意圖:當你不知道哪個應用程序可以處理您的請求,那麼你提到的意圖行動,讓OS決定哪些應用/ s是/是適合你的任務。
例如:播放音樂
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);
OS如何確定?
當有意圖的隱式調用時,OS會取出該動作,然後使用PackageManager將其與所有應用程序的所有已註冊活動的所有意向過濾器進行匹配,然後將結果填充爲列表。它被稱爲intent resolution
因此,您的設備中可能沒有應用程序可用於處理您的請求。在這種情況下,您將得到NullPointer異常。
所以更安全的方式來調用隱含的意圖會是這樣
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
- 1. 什麼是隱式方法調用和顯式方法調用?
- 2. C++中的顯式和隱式賦值有什麼區別
- 3. 爲什麼函數同時具有隱式和顯式原型引用,並且可以設置隱式引用?
- 4. 在風景模式下調用不同的活動Android
- 5. Android,無法隱式啓動活動
- 6. Android隱式和顯式意圖
- 7. 爲什麼我不使用`>> =`而沒有顯式或隱式的定義?
- 8. 有什麼不同的方式調用ViewModel的Init方法
- 9. 爲什麼__getattribute__不會對隱式__getitem __-調用調用?
- 10. 什麼是執行(顯式和隱式)並行和什麼按順序在node.js?
- 11. 活動與視圖有什麼不同?
- 12. 爲什麼在「活動」中直接使用ContextWrapper而不是隱式上下文
- 13. 數據庫中顯式鎖和隱式鎖之間有什麼區別?
- 14. 這兩行代碼中顯式和隱式類型轉換有什麼區別?
- 15. 隱式與顯式StringBuilder.ToString()cethod調用
- 16. 隱式/顯式連接有什麼區別?
- 17. 服務類和類沒有活動有什麼不同
- 18. 什麼原因可以阻止顯式和隱式樣式應用?
- 19. 爲什麼C#和VB.NET隱式地編組char *的方式不同?
- 20. 模塊模式和單例模式有什麼不同?
- 21. 調用removeFromSuperlayer時沒有隱式動畫
- 22. 相同的代碼在不同的Android活動中運行方式不同
- 23. 爲什麼類會顯式而不是隱式地實現IDisposable?
- 24. 使用隱式意圖啓動活動?
- 25. 爲什麼不能在C#中共存同一類型的隱式和顯式運算符?
- 26. 使用iphone的.ipa和.app格式有什麼不同?
- 27. qt樣式表中有什麼不同的筆樣式
- 28. 爲什麼不是我的隱式ctor在下面調用
- 29. 隱式和顯式轉換
- 30. 顯式和隱式意圖
真棒解釋... – 2015-05-12 16:38:57