AsyncTaskLoaderで状態維持
制作中のテキストエディターで、初回load時にFTP接続して2回目以降は以前の接続状態から通信。
って処理がしたくて、loadInBackground()中でクラス変数に状態を保存してたんだが、
サブスレッドで変数記録しても、メインスレッドと別物じゃね?
って気がしたんで確認してみたが、案の定、記録できてなかった。
この件で今日はかなりハマったんだが、
慣れたPerl感覚だと別スレッドなら変数は全部別物と思ったが、Javaの場合はstaticな変数はスレッド間で共通みたい。
状態記憶用の変数をstaticにするだけでloadInBackground()中で設定した値が維持できた。
ただ、スレッド間で同じメモリ領域扱ってるってことだよね?
そうだとすると、複数スレッドで同時に触っちゃうと壊れね?
って思ったんだが、
Android APIの方で調べてて全然わからなくてハマったが、Javaレベルでこんなことができるんだね。
知ってれば簡単だねー
って処理がしたくて、loadInBackground()中でクラス変数に状態を保存してたんだが、
サブスレッドで変数記録しても、メインスレッドと別物じゃね?
って気がしたんで確認してみたが、案の定、記録できてなかった。
この件で今日はかなりハマったんだが、
慣れたPerl感覚だと別スレッドなら変数は全部別物と思ったが、Javaの場合はstaticな変数はスレッド間で共通みたい。
状態記憶用の変数をstaticにするだけでloadInBackground()中で設定した値が維持できた。
ただ、スレッド間で同じメモリ領域扱ってるってことだよね?
そうだとすると、複数スレッドで同時に触っちゃうと壊れね?
って思ったんだが、
synchronized(this){
同期処理;
}
って感じで、synchronized使うとスレッド間でロック取って排他処理ができるみたい。同期処理;
}
Android APIの方で調べてて全然わからなくてハマったが、Javaレベルでこんなことができるんだね。
知ってれば簡単だねー