を取得したいので、リフレクションを使用して取得します。Bundle
中持有的mMap
集合.
在bundle
类中,有getMap()
方法可以获取,但是被标记为hide
リーリー
ソースコードで見たメソッドは以下の通りです: (メソッド名のみコピーします。)
リーリーその中で、
ですが、なぜ入手できるのですか?と聞きたいです。
isParcelled()
,getPairValue()
也是被标记为hide
私の携帯電話は
巴扎黑2017-05-16 13:26:23
Api23 と Api25 のバンドル ソース コードを比較しましたが、getMap に関する明確な情報はありませんでした。
次に、Api16 と Api25 のバンドル ソース コードを比較し、以下の図の黄色のブロックに示すような手がかりを見つけました。
Api25 では Bundle が BaseBundle を拡張していますが、Api16 では拡張されておらず、両方の側で使用されるデータ構造も変更されていることがわかります。
の BaseBundle を見てみましょう。実際に getMap があります: リーリー 次に、Api23 の BaseBundle で getMap を検索してみましょう。結果は次のとおりです。
明らかに、Api23 では、Bundle にもその親クラス BaseBundle にも getMap メソッドがないため、リフレクションは実行できません。どちらか調整しました。
为情所困2017-05-16 13:26:23
@hide は javadoc タグに属しており、バンドル ソース コードが jar パッケージにコンパイルされると、生成された jar パッケージは開発者用であるため、IDE に直接渡すことはできません。バンドル オブジェクトへの参照は、バンドル クラスの Hide メソッドを直接呼び出します。これは、SDK コンパイル済みバージョンと変わりません。
Android 全体に慣れたら、Android ソース コードをコンパイルして独自の android.jar パッケージを生成してみることができます。たとえば、ここには多くのカメラ開発があり、多くのカメラ メソッドが隠されています。毎回リフレクションを介して Hide メソッドを呼び出すのは望ましくないため、カメラ内に隠されているメソッドを IDE で直接呼び出すことができるように、android.jar パッケージの完全なセットを独自にコンパイルしました。