java - 从 View (而不是 Activity )管理清理......单例模式的危险?

标签 java android android-fragments

来自非 Java 背景,我发现自己编写了很多具有广泛功能的 View 类(为了便于移植),就维护而言,它们不一定很好地适合 Android FW 设置 - 对于例如,我可能有一个小部件,它会在某个时间间隔内执行某些操作,当 Activity 暂停/停止/销毁时,我想停止并清理它。通常我可以通过从包含 Activity 的小部件上调用公共(public)方法来管理它,但是 A) 有时这会变得很深,并且必须创建一个公共(public)方法来访问每个父级中的子级会变得丑陋,B) 需要额外(不需要?)关注。

我正在考虑使用像全局委托(delegate)这样的方法来管理这种事情,但是已经阅读了很多关于这种方法的警告——像下面的类这样的东西是否有我可能遗漏的任何固有缺陷?

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. View 有一些东西需要清理。在实例化时,注册它... ActiveRegistry.getInstance().register("paused", someRunnableThatCleansUpStuff)
  2. 扩展 Activity 以便 onPause 调用 ActiveRegistry.getInstance().execute("paused");

最佳答案

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

关于java - 从 View (而不是 Activity )管理清理......单例模式的危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719065/

相关文章:

java - 如何扩展 org.eclipse.wst.jsdt.internal.ui.javaeditor 并使用自定义 javaScript 标签创建我们自己的 Java 脚本编辑器

java - 在 Java 中解析许多复杂命令行参数的最佳方法是什么?

android - 启动器图标设计

Android 错误在夜间模式下加载错误的颜色

java - 膨胀类 fragment 时出错。我在这里能做什么?

java - 调用 getActivity().startActivity(); 之间的区别和startActivity();内部 fragment

Java JDK - 在 Eclipse 中找到,但在 CMD 中没有

java - 如何实现一个有多个实例的类,其中没有一个是相等的

java - 随机颜色不起作用并且仅显示一种

java - Fragment Intermediate(I) :Getting input from edittext, 在 fragment 的 TextView 中设置文本