有關設計建議的詳細內容請參考官網說明
(1)如果你的activity只想被自己設計的application使用,而不想被別的application使用,那就不要建立intent filter,直接使用explicit intents,例如:
Intent it = new Intent();
it.setClass(this,MyActivity.class);
startActivity(it);
這樣就沒有別的applicaton會因為誤發了一個intent而把MyActivity給執行起來。使用intent filter會發佈到Android系統上,讓別的application也有機會執行。
(2)使用intent要特別注意,如果這個intent要呼叫的apk是第三方程式(意即可能被移除),那startActivity()很有可能會產生Exception。兩種解決方式
(1) try{
startActivity();
}catch(ActivityNotFoundException e){
//do something if the apk is uninstalled
}
(2) 利用package manager確定這個apk是否還在Android裝置裡面,做法可參考這篇文章
(3)如果你的Activity可以單獨執行,應該讓使用者在Launcher可以執行它。也就是application中應該有一個activity要有
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
(4)相較於上者,如果你有一個不常用的小程式,尤其是系統內也內建有類似功能的程式,或者這個小程式是依附在其他程式底下,那也許不用大費周章的為他在Launcher設立一個可以執行的icon。只要有intent filter可以在適當的時候被呼叫起來就好了。
(5) 相較於(3)和(4),如果你有兩支activity可獨立執行,但是有很多資料、程式碼是可以共用的,那可以考慮寫成一支application但是有 兩個可以在Launcher執行的icon,像是Camera 和 Camcorder。在AndroidManifest.xml中,這兩支activity都有
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
但是要注意的是要把taskAffinity分開,兩者才不會互相影響。例如
android:taskAffinity="android.task.camera" 和 android:taskAffinity="android.task.Camcorder",
有關taskAffinity可以參考官網的說明
沒有留言:
張貼留言