1

インテントフィルターの使用に機能的な違いはありますか?

Intent myIntent = new Intent("com.this.that.MYACT");
myIntent.setPackage("com.this.that");

対。

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.setPackage("com.this.that");

これらの1つです

  • より安全ですか?
  • もっと早く?
  • 他の利点はありますか?

それともまったく違いはありませんか?

TIA

4

1 に答える 1

1

答えは次のとおりです。Intent「外部アプリ」の作成者が使用するように指示した構造を使用するか、「外部アプリ」を一般的に起動するのに適した構造を取得するために使用getLaunchIntentForPackage()します。PackageManagerIntent

両方の状況で両方をテストしましたが、動作に違いは見られません。

それは、com.this.that.MyActivityたまたま<intent-filter>それ自体がエクスポートされているとマークされている、またはマークされているからです。デフォルトでは、アクティビティはエクスポートされずIntent、サードパーティのアプリからアクティビティを起動するために使用することはできません。

MyActivityまた、プロジェクトにない(「外部アプリ」にある)ため、コードはコンパイルされないため、MyActivity.class存在しません。コンパイル(および正常に動作)する唯一の方法は、アプリと「外部アプリ」の両方が同じJavaパッケージに同じアクティビティクラスを持っている場合です。これはほとんどありません。

より安全ですか?

「外部アプリ」の作成者は、Intentアクション(最初のシナリオ)を使用する必要があります。これは、コードのリファクタリングに直面してもアクションの一貫性を維持する方が簡単だからです。「外部アプリ」の作成者がコードをサブパッケージにリファクタリングしたり、アクティビティクラスの名前を変更したりすると、2番目のアプローチは機能しなくなります。基本的に、アクション名は、アクティビティのパブリックAPIになります(文書化されたエキストラ)。これが、Android SDKが、文書化されサポートされている独自のアクティビティにのみこのアプローチを使用していることを示している理由です。

もっと早く?

2つ目は速度がわずかに向上する可能性がありますが、 1あたりのマイクロ秒数について話しているので、心配する価値はありません。startActivity()

于 2012-04-21T11:01:22.303 に答える