来自非 Java 背景,我发现自己编写了许多具有广泛功能的 View 类(为了便于移植),就维护而言,它们不一定适合 Android FW 设置 - 例如,我可能有一个小部件,它会在我想在 Activity 暂停/停止/销毁时停止并清理的时间间隔内执行某些操作。一般来说,我可以通过从包含的 Activity 调用小部件上的公共方法来管理它,但是 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");