0

是否可以在 Activity 的下一个生命周期中重用之前在其上一个会话中创建的 Handler 对象(在 onPause、onDestroy() 之前)?

就像我在 Activity 中创建一个 Handler 将其传播到其他地方的其他对象一样,Activity 死掉或暂停,然后再次复活并使用旧的处理程序?

    // 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

如果您已经构建了自定义处理程序类,这应该可以工作,但是如果您在活动中定义了自定义处理程序,则必须取消注册 onPause 中的所有处理程序消息。否则你会得到一个空指针异常。但是我不知道在哪种情况下您需要此功能...我通常使用 Handler 进行 UI 访问,但用于活动和逻辑观察者模式之间的通信。

于 2012-11-15T20:09:09.787 回答
0

如果您的处理程序是静态的并且Application(不是活动)尚未从内存中删除,则下次活动开始时,静态对象将在那里。

如果您的处理程序是静态的并且Application已从内存中删除(即服务、线程等都已停止并且您退出唯一的活动活动),则下次启动活动时,Aplication将重新启动对象并重新创建静态对象。

如果您的处理程序不是静态的,那么您应该在每次创建活动时重新创建它,当然,您会得到一个新的。

如果您想获得更具体的答案,您需要发布代码或更具体地说明您的情况。

于 2012-11-15T20:19:19.130 回答