LayoutInflater
fromへの参照を取得するのでContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
(ViewGroup.inflate
そしてActivity.getLayoutInflater
単なる便利なラッパーです)、それが破棄されて再作成されるまで、常に同じインフレータ サービスへの参照を返し、その後、新しく作成されたこのサービスが返されるなどと仮定します...そのマネージャーを想定していますgetSystemService メソッドから取得されるオブジェクトは、「通常の」サービスのバインダー オブジェクトと同様です。
編集:そして、私が間違っていたと言っている;)
ソースコードと android.view.ContextThemeWrapper (アクティビティのスーパークラス) をチェックアウトしました:
@Override public Object getSystemService(String name) {
if (LAYOUT_INFLATER_SERVICE.equals(name)) {
if (mInflater == null) {
mInflater = LayoutInflater.from(mBase).cloneInContext(this);
}
return mInflater;
}
return mBase.getSystemService(name);
}
そして、おそらく mBase Context 実装である android.app.ContextImpl で:
public Object getSystemService(String name) {
ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);
return fetcher == null ? null : fetcher.getService(this);
}
where : プライベート スタティック 最終 HashMap SYSTEM_SERVICE_MAP = new HashMap();
ServiceFetcher は、「システム サービス インスタンス」をキャッシュおよび取得するための内部クラスです。
activity/ContextWrapper ごとに 1 つの LayoutInflater があることは確かです。より多くの観測研究ソースについては、どうぞ;)