ローカル変数以外は複数のスレッドから共有され得る
Javaの変数は,ローカル変数だけがスレッドセーフ(複数のスレッドが同時に動作しても異常をきたさないこと)である。その理由は,ローカル変数はスレッドごとに割り振られる「Javaスタック」と呼ぶメモリー領域に格納されるからだ。これに対して共有メモリーである「ヒープ領域」に格納されるインスタンス変数やクラス変数は,複数のスレッドが共有する可能性があり,スレッドセーフではない。そのため,参照または更新するときにはロック(更新メソッドにsynchronizedキーワードを指定する)などを検討しなければならない
画像キャッシュを、クラス変数に入れているのですが、スレッドセーフにしないといけなさそうですが、まだ、よくわかっていません。
「更新メソッドにsynchronizedキーワードを指定する」
ということだけでいいのかなあ...まだまだ、勉強必要だ!
[Android SDK]タブの画像を選択、非選択で入れ替えるときはStateListDrawableを使う
Icon Design Guidelines | Android Developers
タブ用のアイコンの作り方は↑にあるのだが、実際どうやって、選択、非選択のアイコンを切り替えるのか、わからなかったが、
あらためてAndroid Developers のグループで聞いてみたところ、StateListDrawableを使えば良いということを教わりましたが、まさかこんなクラスがあるとは思いませんでした。
ここにアイコンの作り方のところからここにリンクを張っててもらえたら良かったのですが...。
とのことです。
↓詳細はこちら
Google グループ
drawableフォルダ内に、tab_01.xmlのような名前で、以下の内容を入れておきます。
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab1_selected" /> <item android:drawable="@drawable/tab1_normal" /> </selector>
タブを作るところで、setIndicatorで指定します。drawableはxmlでしていする事もあるということですね。
TabSpec tab1 = tabHost.newTabSpec("list"); tab1.setIndicator("リスト",getResources().getDrawable(R.drawable.tab_01));