我正在尝试在 android 应用程序中使用 ZMQ。理想情况下,我应该在应用程序关闭时创建一次上下文并 term() 它。
但与 c++ 应用程序不同。android 上没有 main() 函数。基于关于活动生命周期的谷歌文档。函数onCreate()、onStop()可以被多次调用,函数onDestroy()只被系统调用。
解决方案 1:在 asyncTask() 中创建/销毁 ZMQ 上下文。但这将非常昂贵。
解决方案2:基于线程Android全局变量,我可以创建一个全局ZMQ.Context 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() //which calls context.term()
在某个阶段手动调用。我不确定调用函数 term() 来破坏 zmq 上下文的好地方在哪里。
那么在 android 应用程序中创建/终止 ZMQ 上下文的正确方法是什么?
环境:
Ubuntu:16.04 LTS
安卓工作室:2.3.3
ZMQ:org.zeromq:jeromq:0.4.0