2

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

用途は…のようなものかもしれません。

  1. AViewには、クリーンアップする必要があるものがあります。インスタンス化時に、それを登録します... ActiveRegistry.getInstance().register("paused", someRunnableThatCleansUpStuff)
  2. 呼び出すActivityように拡張しますonPauseActiveRegistry.getInstance().execute("paused");
4

1 に答える 1

0

あなたは必要以上の仕事をしています。Fragmentsを使用すると (古いバージョンの Android との下位互換性を確保したい場合は、サポート パッケージから)、生活がずっと楽になります。各フラグメントはアクティビティに埋め込まれ、ホスト アクティビティのライフサイクルに直接リンクされたライフサイクルを持ちます。それらを使用すると、現在心配していることのほとんどがシステムによって管理されるため、コードの複雑さが大幅に軽減されます。

于 2012-05-26T04:50:14.040 に答える