Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在onDestroy()onPause()之前创建的活动中使用上一个处理程序可以吗?_Android - Fatal编程技术网

Android 在onDestroy()onPause()之前创建的活动中使用上一个处理程序可以吗?

Android 在onDestroy()onPause()之前创建的活动中使用上一个处理程序可以吗?,android,Android,在活动的下一个生命周期中重用先前在其上一个会话中创建的处理程序对象(onPause之前,onDestroy())可以吗 就像我在活动中创建一个处理程序一样,将它传播到其他地方的其他对象,该活动会停止或暂停,然后重新启动并使用旧的处理程序 // In the oncreate() method I have this code to recreate handler every time // Then I set the handler to a static Global ob

在活动的下一个生命周期中重用先前在其上一个会话中创建的处理程序对象(onPause之前,onDestroy())可以吗

就像我在活动中创建一个处理程序一样,将它传播到其他地方的其他对象,该活动会停止或暂停,然后重新启动并使用旧的处理程序

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

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

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


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

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


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

一般来说,只要旧处理程序不使旧活动保持活动状态(通过挂起的回调等),就可能。一个代码示例可能会给出更具体的回答。我已经更新了问题,请看一看。感谢基本上这是用于通信bw活动和服务中的线程。线程通过它们拥有的处理程序引用将消息()数据发送回“活动”。当活动结束后恢复活动时,它不知道服务中的线程最近发布的消息。我使用广播与自定义意图过滤器进行服务活动/线程通信。工作非常好!任何例子都会很好,也很有帮助。网上有很多例子。是千分之一。你可以在你的服务中使用接收器,在你的应用程序中使用接收器(也可以在活动中使用接收器),这样你就可以进行双向通信。我提供了一些代码,请注意。假设过程没有结束,只有活动消失了,我的处理程序每次都存储在新全局对象的静态变量onCreate中。您发布的代码没有重用以前的处理程序。正如您所说,您可以在
onCreate()
中创建一个新的处理程序,并将其分配给
UIGlobals
。一旦您分配了一个新的处理程序,旧的处理程序就会消失。此外,根据上面的代码,当您的活动结束时,链接到您的活动的处理程序将由服务保留在用户中,这可能会导致内存泄漏。