答案是:使用任何Intent
結構「外部應用程序」的作者告訴你使用,或PackageManager
使用getLaunchIntentForPackage()
得到一個Intent
適合一般啓動「外部應用程序」 。
我已經在兩種情況下測試了它們,並且沒有看到行爲上的差異。
這只是因爲com.this.that.MyActivity
碰巧有一個<intent-filter>
或已明確標記自己被導出。默認情況下,不會導出活動,也不會使用Intent
從第三方應用程序啓動它們。
此外,您的代碼甚至不會編譯,因爲MyActivity
不在您的項目中(它位於「外部應用程序」中),因此MyActivity.class
不存在。如果您的應用程序和「外部應用程序」恰好在同一個Java包中具有相同的活動類,那麼它將編譯(併成功工作)的唯一方式是,這不太可能。
更安全嗎?
「外部應用程序」的作者應該使用Intent
動作(您的第一個場景),因爲在重構代碼時保持這些動作更加容易。如果「外部應用程序」的作者將其代碼重構爲子包,重命名活動類等,則第二種方法將會中斷。基本上,活動名稱將成爲活動的公共API(如果您願意)記錄的額外)。這就是爲什麼你會看到Android SDK專門爲它自己記錄和支持的活動使用這種方法。
更快?
有可能是第二個一個小小的速度增加,但我們會每startActivity()
說話微秒,這是不值得擔心。
我想在安全性和牢度方面應該沒有任何區別。可能是前者可以從外部應用程序調用,後來只能通過相同的應用程序類。只是猜測。 – Javanator 2012-04-21 07:04:48
不,我在兩種情況下都測試了它們,並沒有看到行爲上的任何差異。他們完全可以互換,這不是不可能的,我只是好奇,如果我忽略了一些東西。 – 2012-04-21 07:06:39
同意。我想我們只是有兩種不同的方式來創建相同的意圖對象 – Javanator 2012-04-21 07:07:59