如何在Android应用程序中创建ZMQ上下文
我想在Android应用程序中使用ZMQ。理想情况下,我应该在应用程序关闭时创建一次和定义上下文()。如何在Android应用程序中创建ZMQ上下文
但不同的是C++应用程序。 android上没有main()函数。基于有关activity life cycle的Google文档。函数onCreate(),onStop()可以被多次调用,函数onDestroy()只能被系统调用。
解决方法1:创建/销毁ZMQ上下文中一个的AsyncTask()。但那样会非常昂贵。
溶液2:基于线程Android global variable上,我可以创建一个全局变量ZMQ.Context context
。这种方法的问题是:没有适当的功能调用context.term();
。
solution3。创建一个单独的类
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上下文正确的方法是什么?
ENV:
的Ubuntu:16.04 LTS
Android的工作室:2.3.3
ZMQ:org.zeromq:jeromq:0.4.0
我认为你应该使用singletone实例作为更直接的解决方案。
在Android所有网络通信必须保持是一个单独的线程(未UI线程)。所以当你中断网络线程时,你可能会指定ZMQ.Context。如果您的应用程序不需要后台网络连接(仅在单独的活动中执行网络连接),则出于性能原因,最好在这些活动的onPause()方法中指定ZMQ.Context。
我使用这种方法,但满足终止SUB插口问题。虽然我认为这种方法非常好。