2

来自非 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();
            }
        }
    }
}

使用可能类似于...

  1. AView有东西需要清理。在实例化时,注册它... ActiveRegistry.getInstance().register("paused", someRunnableThatCleansUpStuff)
  2. 扩展Activity以便onPause调用ActiveRegistry.getInstance().execute("paused");
4

1 回答 1

0

你做的工作比你需要的要多。使用Fragments(来自支持包,如果您想确保与旧版本的 android 向后兼容),将使您的生活变得更加轻松。每个片段都嵌入在一个活动中,并具有与其宿主活动的生命周期直接链接的生命周期。使用它们应该会显着降低代码的复杂性,因为您目前担心的大部分内容将由系统管理。

于 2012-05-26T04:50:14.040 回答