答えは次のとおりです。Intent
「外部アプリ」の作成者が使用するように指示した構造を使用するか、「外部アプリ」を一般的に起動するのに適した構造を取得するために使用getLaunchIntentForPackage()
します。PackageManager
Intent
両方の状況で両方をテストしましたが、動作に違いは見られません。
それは、com.this.that.MyActivity
たまたま<intent-filter>
それ自体がエクスポートされているとマークされている、またはマークされているからです。デフォルトでは、アクティビティはエクスポートされずIntent
、サードパーティのアプリからアクティビティを起動するために使用することはできません。
MyActivity
また、プロジェクトにない(「外部アプリ」にある)ため、コードはコンパイルされないため、MyActivity.class
存在しません。コンパイル(および正常に動作)する唯一の方法は、アプリと「外部アプリ」の両方が同じJavaパッケージに同じアクティビティクラスを持っている場合です。これはほとんどありません。
より安全ですか?
「外部アプリ」の作成者は、Intent
アクション(最初のシナリオ)を使用する必要があります。これは、コードのリファクタリングに直面してもアクションの一貫性を維持する方が簡単だからです。「外部アプリ」の作成者がコードをサブパッケージにリファクタリングしたり、アクティビティクラスの名前を変更したりすると、2番目のアプローチは機能しなくなります。基本的に、アクション名は、アクティビティのパブリックAPIになります(文書化されたエキストラ)。これが、Android SDKが、文書化されサポートされている独自のアクティビティにのみこのアプローチを使用していることを示している理由です。
もっと早く?
2つ目は速度がわずかに向上する可能性がありますが、 1あたりのマイクロ秒数について話しているので、心配する価値はありません。startActivity()