お久しぶりですLLです。
現在AndroidでOpenGLESを触っています。Canvasを触ったときもそうだったのですが結構Cotnextを使う機会が多いのでいっそのことグローバルクラスに格納でもして簡単にアクセス出きるようにしようかと思っています。
そしてContextについていろいろ調べてみたのですが、どうやらActivityとApplicationの二つのContextがあるみたいです(中身は一緒らしいですが動作はいくつか異なる模様です(Activityの方は破棄される可能性があったり))
参考↓
http://individualmemo.blog104.fc2.com/b ... ry-41.html
そこで疑問なのですが、
『グローバルでContextを保持させるとしたらActivity(this)か、ApplicationのどっちのContextを保持した方がいいでしょうか?』
また
『Contextをグローバルで保持させても問題無いでしょうか?』
よろしくお願いします。
以下参考サイト
http://mitoroid.com/category/android/an ... ontext.php
http://yuki312.blogspot.jp/2012/02/this ... pplic.html
AndroidのContextについての疑問
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: AndroidのContextについての疑問
画面と結びついているならActivityのContextじゃないと意味がいないんじゃないでしょうか? これは永続化させるとライフサイクルで支障が出ます。
ファイルとかアプリの寿命と同じで良いのなら、その用途のApplication Contextは永続化でも良いと思いますが。
ファイルとかアプリの寿命と同じで良いのなら、その用途のApplication Contextは永続化でも良いと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: AndroidのContextについての疑問
softyaさんご返信ありがとうございます。
ActivityとApplicationのContextは同じだと記述されていてもやはり細部で違いがあるんですね。
永続か一時かで違いがあるのだとしたらやはり、そのアクティビティ中で読み込む画像リソースがContextの主な使用目的なのでActivityのContextをグローバルで持たせてみようかと思います。
まぁ、OpenGLとAndroidのライフサイクルを勘違いした結果、誤った設計してしまったために大規模な修正(と言うかほぼ作り直し)になってしまったのでこの結果を生かせるのは相当先になりそうですが・・・
(AndroidのSurfaceViewのような感覚で独立したスレッドクラスを作り、そこでグローバル化したGLコンテキストを使ってリソースを読み込もうとした結果、GLコンテキストの生成より先にその読み込みメソッドを通ってしまったために必ずNullPointerExceptionを起こすような物が出来ました・・・よくよく参考書を読み返したらスレッドクラスではリソースをいじるようなことは一切せず、座標などの演算処理だけを行っていたのである種の必然的なミスだと思います・・・・ネストネストの繰り返しで半ばカビのような根深いプログラムになってましたし・・・)
ActivityとApplicationのContextは同じだと記述されていてもやはり細部で違いがあるんですね。
永続か一時かで違いがあるのだとしたらやはり、そのアクティビティ中で読み込む画像リソースがContextの主な使用目的なのでActivityのContextをグローバルで持たせてみようかと思います。
まぁ、OpenGLとAndroidのライフサイクルを勘違いした結果、誤った設計してしまったために大規模な修正(と言うかほぼ作り直し)になってしまったのでこの結果を生かせるのは相当先になりそうですが・・・
(AndroidのSurfaceViewのような感覚で独立したスレッドクラスを作り、そこでグローバル化したGLコンテキストを使ってリソースを読み込もうとした結果、GLコンテキストの生成より先にその読み込みメソッドを通ってしまったために必ずNullPointerExceptionを起こすような物が出来ました・・・よくよく参考書を読み返したらスレッドクラスではリソースをいじるようなことは一切せず、座標などの演算処理だけを行っていたのである種の必然的なミスだと思います・・・・ネストネストの繰り返しで半ばカビのような根深いプログラムになってましたし・・・)