Java 以外のバックグラウンドから来て、(移植可能にするために) 拡張機能を備えた多くの View クラスを作成していることに気付きましたが、これらはメンテナンスに関する限り Android FW セットアップに必ずしもうまく適合するとは限りません。たとえば、私はアクティビティが一時停止/停止/破棄されたときに停止してクリーンアップしたい間隔で何かを行うウィジェットがあるかもしれません。一般的には、含まれているアクティビティからウィジェットのパブリック メソッドを呼び出すだけでこれを管理できますが、A) これはかなり深くなる場合があり、すべての親の子にアクセスするためのパブリック メソッドを作成する必要があり、B) が必要です。余分な(不要?)注意。
この種のものを管理するためにグローバル デリゲートのようなアプローチを使用することを検討していますが、この種のアプローチに関する多くの警告を読みました。
import java.util.HashMap;
import java.util.HashSet;
public class ActiveRegistry {
private static final ActiveRegistry instance = new ActiveRegistry();
public static ActiveRegistry getInstance(){
return instance;
}
private HashMap<String, HashSet<Runnable>> registry = new HashMap<String, HashSet<Runnable>>();
private ActiveRegistry(){
}
public void register(String key, Runnable runnable){
if(!registry.containsKey(key)){
HashSet<Runnable> list = new HashSet<Runnable>();
registry.put(key, list);
}
HashSet<Runnable> list = registry.get(key);
list.add(runnable);
}
public void execute(String key){
if(registry.containsKey(key)){
HashSet<Runnable> list = registry.get(key);
for(Runnable runnable : list){
runnable.run();
}
}
}
}
用途は…のようなものかもしれません。
- A
View
には、クリーンアップする必要があるものがあります。インスタンス化時に、それを登録します...ActiveRegistry.getInstance().register("paused", someRunnableThatCleansUpStuff)
- 呼び出す
Activity
ように拡張しますonPause
ActiveRegistry.getInstance().execute("paused");