Android Contextの原理と使用のまとめ

2552 ワード

一、Context継承体系とContextはどのように作成したのか
1.Context継承システム
Activity、Service、ApplicationはContextWrapperから継承され、ContextWrapper implements Contextであることを覚えておいてください.各:Activity、Service、ApplicationはContextインスタンスです.
2.Contextがいつ作成され、どのように作成されたか-ソースコードを表示
Androidアプリケーションウィンドウ(Activity)の実行コンテキスト環境(Context)の作成プロセス分析
Androidカーネル--Contextオブジェクト
AndroidでContextの詳細---あなたが知らないContext
以上の3つの記事では、Contextがいつ作成されたかをソースコードの観点から分析していますが、通常の開発では、ActivityとServiceがContextから継承されていることを知る必要があります.新しいActivityまたはServiceインスタンスを作成する限り、新しいContextインスタンスを作成します.
Context総数=Activity個数+Service個数+1 ApplicationContext
コマンドラインからContextを表示できる個数
adb shell dumpsys meminfo package_name

二、Contextに関する質問
1.getBaseContextとgetApplicationContextの違いは?
Activityを持つContextはContextを持つことに相当し、AppliactionContexグローバルを持つのはこれだけです
2.ビューのContextはどこから来ましたか?
例:new TextView(Context);
通常、1つのActivityに入力のは、現在のActivityまたはActivityである.getBaseContext()なので、View.getContext()は、実は現在のActivityの参照です.
一般的なシーンでは、Adapterは通常、getView時のinflateビューに使用されるコンストラクタを介してContextを渡します.しかし、getViewの最も重要なパラメータはparentViewです.これはListViewオブジェクト自体であり、parentViewを通過することができます.getContextはContextオブジェクトを取得して手動転送を減らします.
3.Contextでエラーが発生する箇所
Dialog.BuilderはActivityに転送する必要があり、Activityに転送することはできません.getApplicationContext()
4.Contextの役割、表示方法
リソースへのアクセス、ビューの作成、4つのコンポーネントの作成
Contextとは?
参考資料:
Androidソース分析-Contextを全面的に理解
AndroidにおけるContextのまとめとその使い方
Contextの参照による3メモリオーバーフロー
1.Contextによるメモリオーバーフローの原因:
Avoiding memory leaks 、  Avoiding memory leaks
Android - what's the difference between the various methods to get a Context?
以上の文章は詳しく説明していますが、以下は簡単な説明です.
最も一般的なメモリ形式はBitmapが解放されていないが、画像は通常ImageViewが保有しているため、ImageViewもGCで解放されないため、ImageViewを作成するにはContextが必要であり、このContextはActivityである.
Bitmap -> ImageView -> Contex(Activity)
Activityが常に解放されない場合、メモリが最終OOMに不足します.
2.ライフサイクルが長いオブジェクトについては、ApplicationContextを使用します.以下のドキュメントでは、カスタムApplicationがプロジェクト全体でApplication Contextを簡単に入手できる方法について説明します.
カスタムアプリケーションを使用すると、Contextオブジェクトが必要なときに転送され、Contextを持つことによるメモリオーバーフローを回避できます.ApplicationContextグローバルには1つのインスタンスしかないため、複数のActivity自体がContextから継承され、複数のContextインスタンスになります.
AndroidでActivityが変数を共有するもう一つの方法:Application context
AndroidのContextの使用について話します!!!
4.Contextメモリオーバーフロー関連資料
Androidラーニングシリーズ(36)--Appデバッグメモリ流出のContext編(上)
Androidラーニングシリーズ(37)--Appデバッグメモリ流出のContext編(下)
四、自分でContextを作成する
Androidは他のパッケージのContextインスタンスを取得して悪いことをします
http://chroya.iteye.com/blog/761441