iRSSの日記

はてなダイアリーiRSSの日記の続き

クラス変数はスレッドセーフにしないといけなさそう

ローカル変数以外は複数のスレッドから共有され得る
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));