Android为Socket.io创建单个服务实例

时间:2016-07-16 22:25:30

标签: android sockets

在我的应用程序中我无法创建简单的单一服务来连接到Socket,在我的应用程序中首次运行应用程序后我可以发出一个请求,但在关闭应用程序并再次运行后,我的应用程序向socket.io发送两次请求,之后从最近的应用程序中清除应用程序,向socket.io发送多个请求。请帮我创建一个服务来创建一个连接,谢谢

我的服务:

public class SignalChatServiceProvider extends Service {
    public static      SignalChatServiceProvider instance                    = null;

    public static boolean isInstanceCreated() {
        return instance == null ? false : true;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return myBinder;
    }

    private final IBinder myBinder = new LocalBinder();

    public class LocalBinder extends Binder {
        public SignalChatServiceProvider getService() {
            return SignalChatServiceProvider.this;
        }
    }

    @Override
    public void onCreate() {
        super.onCreate();
        realm = Realm.getDefaultInstance();
        signalApplication = (SignalApplication) getApplication();
        EventBus.getDefault().register(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        connectConnection();
        Log.e("EJRA...", "");
        return START_STICKY;
    }


    private Runnable onTypingTimeout = new Runnable() {
        @Override
        public void run() {

        }
    };

    private void connectConnection() {

        instance = this;
        signalApplication.CHAT_SOCKET = signalApplication.getSocket();
        signalApplication.getSocket().on(Socket.EVENT_CONNECT_ERROR, onConnectError);
        signalApplication.getSocket().on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
        signalApplication.getSocket().on(Socket.EVENT_CONNECT, onConnect);

        signalApplication.getSocket().on("new message", onNewMessage);
        signalApplication.getSocket().on("user joined", onUserJoined);
        signalApplication.getSocket().on("getProductImages", getProductImages);

        signalApplication.getSocket().connect();
    }

    private void disconnectConnection() {
        instance = null;

        signalApplication.getSocket().disconnect();

        signalApplication.getSocket().off(Socket.EVENT_CONNECT, onConnect);
        signalApplication.getSocket().off(Socket.EVENT_DISCONNECT, onDisconnect);
        signalApplication.getSocket().off(Socket.EVENT_CONNECT_ERROR, onConnectError);
        signalApplication.getSocket().off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
        signalApplication.getSocket().off("new message", onNewMessage);
        signalApplication.getSocket().off("user joined", onUserJoined);
        signalApplication.getSocket().off("getProductImages", getProductImages);

        signalApplication.getSocket().disconnect();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        disconnectConnection();

        if (!realm.isClosed())
            realm.close();
    }
}

ActivityMain:

if (signalApplication.getSocket() != null && !SignalChatServiceProvider.isInstanceCreated()) {
    startService(new Intent(getBaseContext(), SignalChatServiceProvider.class));
}

申请类:

public class SignalApplication extends Application {

    public static List<MarketsBaseInformation> market_list_cache_data;
    public static Socket                       CHAT_SOCKET;

    @Override
    public void onCreate() {
        super.onCreate();

        resources = this.getResources();
        context = getApplicationContext();

        IO.Options opts = new IO.Options();
        opts.forceNew = true;
        opts.reconnection = true;

        try {
            CHAT_SOCKET = IO.socket(ClientSettings.getChatAddress(), opts);
        } catch (URISyntaxException e) {
            e.printStackTrace();
            Log.e("SOCKET.IO ", e.getMessage());
        }


    }

    public Socket getSocket() {
        return CHAT_SOCKET;
    }
}

1 个答案:

答案 0 :(得分:0)

问题已解决

gradlew androidInstall