Android で毎回お世話になるのが Context. 今回素晴らしい発見をしたので書いておく。
Context とは
アプリケーションの情報を持つオブジェクトのようなものだ。これには Activity Context と Application Context の2つがあるのだけど、Activity Context は例えばAlertDialog などに渡さなきゃいけない。そうしないと例外が起きる。反対にApplication Context はres にあるxml情報を取って来る getResource() だったり、SharedPreference を作る。 Activity Context は Application Context の派生なので、 Application Context でできることは Activity Context でもできる。 さて、このContextだが、毎回Activity から別クラスに渡すときに引数でContextを渡してた。そうじゃないと文字やSharedPrefrenceにアクセスできなかったからだ。だがApplication Contextを取ってこれさえすれば別にcontextを渡す必要はない。
Application Context をどこからでも取って来れるようにする
そのためには自作Application クラスを作り、そのオブジェクトをシングルトン化すればいいのだ。
public class ApplicationController extends Application { private static ApplicationController sInstance; @Override public void onCreate() { super.onCreate(); sInstance = this; } public static synchronized ApplicationController getInstance() { return sInstance; } }
こうするとなんと、どのクラスからでも ApplicationController.getInstance().getApplicationContext()
でContextを取って来れる!
これは自分に取ってはかなり画期的な発見で、今までのAndroid開発スタイルがガラリと変わった。
てことでくすればコードがちょっとは簡潔になるんじゃないだろうか。