Androidのアプリ開発関連のブログ

AsyncTaskLoaderで状態維持

制作中のテキストエディターで、初回load時にFTP接続して2回目以降は以前の接続状態から通信。
って処理がしたくて、loadInBackground()中でクラス変数に状態を保存してたんだが、

サブスレッドで変数記録しても、メインスレッドと別物じゃね?
って気がしたんで確認してみたが、案の定、記録できてなかった。

この件で今日はかなりハマったんだが、
慣れたPerl感覚だと別スレッドなら変数は全部別物と思ったが、Javaの場合はstaticな変数はスレッド間で共通みたい。
状態記憶用の変数をstaticにするだけでloadInBackground()中で設定した値が維持できた。

ただ、スレッド間で同じメモリ領域扱ってるってことだよね?
そうだとすると、複数スレッドで同時に触っちゃうと壊れね?
って思ったんだが、
synchronized(this){
   同期処理;
}
って感じで、synchronized使うとスレッド間でロック取って排他処理ができるみたい。

Android APIの方で調べてて全然わからなくてハマったが、Javaレベルでこんなことができるんだね。
知ってれば簡単だねー