0

以前のセッション (onPause、onDestroy() の前) で以前に作成されたアクティビティの次のライフで Handler オブジェクトを再利用しても問題ありませんか?

アクティビティでハンドラを作成して他のオブジェクトに伝播するように、アクティビティは死ぬか一時停止し、その後再び生き返って古いハンドラを使用しますか?

    // In the oncreate() method I have this code to recreate handler every time
    // Then I set the handler to a static Global object 
    // Other Objects use the global object's static method to get 
    //fresh handler every timebefore calling sendMessage()

        /**
     * Set up handler 
     */     
    Handler h = new Handler(new Callback() 
    {           
        public boolean handleMessage(Message msg) 
        {
            handleServiceMessage(msg);
            return true;
        }
    }); 


    uiglobal = new UIGlobals(h);

UiGlobals は次のように宣言されています

 private static UIGlobals uiglobal = null;

上記のアプローチが正しいかどうかわからない..

私のGlobalUIクラスは次のようになります

    public class UIGlobals 
    {
         private static Handler handler = null; 
         public UIGlobals(Handler h)
        {
            handler = h;
        }   
        public static Handler getHandler()
        {
            return handler;
        }    
    }
4

2 に答える 2

0

ハンドラーが静的であり、Application(アクティビティではなく)がメモリから削除されていない場合、次にアクティビティが開始されると、静的オブジェクトがそこにあります。

ハンドラーが静的で、Applicationメモリから削除されている場合(つまり、サービス、スレッドなどがすべて停止され、アクティブなアクティビティのみを終了した場合)、次にアクティビティを開始すると、Aplicationオブジェクトが再起動され、静的オブジェクトが再作成されます。

ハンドラーが静的でない場合は、アクティビティを作成するたびにハンドラーを再作成する必要があります。もちろん、新しいハンドラーを取得します。

より具体的な回答が必要な場合は、コードを投稿するか、状況をより具体的にする必要があります。

于 2012-11-15T20:19:19.130 に答える
0

カスタム Handler クラスを作成している場合、これは機能するはずですが、カスタマイズしたハンドラーをアクティビティで定義している場合は、onPause のすべてのハンドラー メッセージを登録解除する必要があります。そうしないと、null ポインター例外が発生します。しかし、どのようなシナリオでこの機能が必要になるかはわかりません...私は通常、UI アクセスには Handler を使用しますが、アクティビティとロジック オブザーバー パターン間の通信には Handler を使用します。

于 2012-11-15T20:09:09.787 に答える