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

如何在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插口问题。虽然我认为这种方法非常好。