如何在android应用程序中创建ZMQ上下文

如何在android应用程序中创建ZMQ上下文,android,zeromq,jeromq,Android,Zeromq,Jeromq,我试图在android应用程序中使用ZMQ。理想情况下,我应该创建一次上下文,并在应用程序关闭时将其命名为term() 但不同于C++应用程序。android上没有main()函数。基于谷歌的文档关于。函数onCreate(),onStop()可以多次调用,函数onDestroy()只能由系统调用 解决方案1:在asyncTask()中创建/销毁ZMQ上下文。但那将是非常昂贵的 解决方案2:基于线程,我可以创建一个全局ZMQ.Context变量。这个方法的问题是:没有合适的函数来调用contex

我试图在android应用程序中使用ZMQ。理想情况下,我应该创建一次上下文,并在应用程序关闭时将其命名为term()

但不同于C++应用程序。android上没有main()函数。基于谷歌的文档关于。函数onCreate(),onStop()可以多次调用,函数onDestroy()只能由系统调用

解决方案1:在asyncTask()中创建/销毁ZMQ上下文。但那将是非常昂贵的

解决方案2:基于线程,我可以创建一个全局
ZMQ.Context
变量。这个方法的问题是:没有合适的函数来调用
context.term()

解决方案3。创建单例类

import org.zeromq.ZMQ;

public class ZmqHelper {
    private static ZMQ.Context _context;

    public static ZMQ.Context createContext(){
        return getContext();
    }

    public static ZMQ.Context getContext(){
        if(_context == null) {
            _context = ZMQ.context(1);
        }
        return _context;
    }

    private ZmqHelper(){
    }

    public static boolean release(){
        // make sure all sockets are closed
        if(_context != null) {
            _context.term();
            _context = null;
            return true;
        }
        return false;
    }
}
单例问题与解决方案2相同。我必须在某个阶段手动调用
ZmqHelper.release()//它调用context.term()
。我不确定在哪里调用函数term()来破坏zmq上下文

那么,在android应用程序中创建/终止ZMQ上下文的正确方法是什么

环境:

Ubuntu:16.04 LTS

安卓工作室:2.3.3


ZMQ:org.zeromq:jeromq:0.4.0

我认为您应该使用单音实例作为更直接的解决方案

Android上的所有网络通信都必须是一个单独的线程(而不是UI线程)。因此,当您中断网络线程时,可以使用术语ZMQ.Context。如果你的应用程序不需要后台网络连接(你只在单独的活动中执行netwroking),出于性能原因,最好在这些活动的onPause()方法中使用ZMQ.Context

我正在使用这种方法,但在终止子套接字时遇到问题。虽然我认为这个方法很好