Socket.IO带有消耗大量电池的服务(Android)

问题描述 投票:4回答:1

早安。

我有一个问题,正在考虑电池管理的最佳实践。

事先请不要提出建议,也不要[[GCM也不要Firebase,因为我对它们不感兴趣,以后我会告诉原因。

这是场景。

我有一个自己的社交网络。

我几乎不相信

Viber

WhatsAppTelegram使用的是任何Google服务,例如GCMFirebase,而且我同时使用了它们和我对延迟和接收到的价格感到非常不满意,所以对我来说最好的选择是将所有通知保留在Socket.IO的掩盖之下。所以现在每个步骤:

•我创建了始终运行的服务,无论该服务如何运行。

•服务已附加Socket.IO库,并且该服务通过Socket.IO保持与服务器的持久连接。

•该服务处理接下来的所有Socket.IO逻辑:完整的应用程序通知-组通知,朋友请求,消息通知以及所有这些,全部都包含在我的应用程序中的大约10种通知类型。

•一切都是完美的,除非我看到我的Samsung S7 Edge抱怨应用程序的使用。我虽然是Samsung典型的抱怨者之一,但是当我看到电池使用量时,我感到非常震惊...我的应用使用了[[比安卓操作系统更重要的电池

,这对我来说是一个很大的打击。

不久后,我将向您展示我的服务代码:

我这样初始化套接字。

@Override public int onStartCommand(Intent intent, int flags, int startId) { initSocketFully(); return START_STICKY; } private void initSocketFully() { sharedHelper = new SharedHelper(this); currentUserId = sharedHelper.getUserId(); destroySocket(); try { mSocket = IO.socket(SOCKET_URL); } catch (URISyntaxException e) { e.printStackTrace(); } initSocket(); } private void initSocket() { mSocket.on(EVENT_CONNECT, onSocketConnected); mSocket.on(EVENT_CONNECT_ERROR, onSocketConnectionError); mSocket.on(EVENT_DISCONNECT, onSocketDisconnected); mSocket.on(EVENT_NEW_MESSAGE, onNewMessageReceived); mSocket.on(EVENT_STOPPED_TYPING, onUserStoppedTyping); mSocket.on(EVENT_TYPING, onUserTyping); mSocket.on(EVENT_MESSAGE_SENT, onMessageSent); mSocket.on(EVENT_CONNECT_TIMEOUT, onSocketTimeOut); mSocket.on(EVENT_ONLINE_STATUS, onOnlineStatusReceived); mSocket.on(EVENT_ON_GAME_CREATED, onMafiaGameCreated); mSocket.on(EVENT_ON_COMMENT_ADDED, onCommentAdded); mSocket.on(EVENT_ON_FRIEND_REQUEST_ACCEPTED, onFriendRequestAccepted); mSocket.on(EVENT_ON_FRIEND_REQUEST_DECLINED, onFriendRequestDeclined); mSocket.on(EVENT_ON_POST_LIKED, onPostLiked); mSocket.on(EVENT_ON_POST_MADE, onPostMade); mSocket.on(EVENT_ON_FRIEND_REQUESTED, onFriendRequested); mSocket.connect(); }

像这样在服务onDestroy的回调中销毁它:

 private void destroySocket() {
    if (mSocket != null) {
        mSocket.disconnect();
        mSocket.off(EVENT_CONNECT, onSocketConnected);
        mSocket.off(EVENT_ON_FRIEND_REQUEST_ACCEPTED, onFriendRequestAccepted);
        mSocket.off(EVENT_CONNECT_ERROR, onSocketConnectionError);
        mSocket.off(EVENT_ON_FRIEND_REQUEST_DECLINED, onFriendRequestDeclined);
        mSocket.off(EVENT_DISCONNECT, onSocketDisconnected);
        mSocket.off(EVENT_NEW_MESSAGE, onNewMessageReceived);
        mSocket.off(EVENT_STOPPED_TYPING, onUserStoppedTyping);
        mSocket.off(EVENT_ON_GAME_CREATED, onMafiaGameCreated);
        mSocket.off(EVENT_TYPING, onUserTyping);
        mSocket.off(EVENT_MESSAGE_SENT, onMessageSent);
        mSocket.off(EVENT_CONNECT_TIMEOUT, onSocketTimeOut);
        mSocket.off(EVENT_ONLINE_STATUS, onOnlineStatusReceived);
        mSocket.off(EVENT_ON_COMMENT_ADDED, onCommentAdded);
        mSocket.off(EVENT_ON_POST_LIKED, onPostLiked);
        mSocket.off(EVENT_ON_POST_MADE, onPostMade);
        mSocket.off(EVENT_ON_FRIEND_REQUESTED, onFriendRequested);
    }
}

重要的是,我每隔10分钟启动一次此服务,这是在系统终止服务过程的保证,但它会再次启动,并且不会给用户造成任何延迟。

我的问题是下一个:

如何优化所有这些逻辑以免消耗更多的手机电量而不是

Android OS

,因为这样浪费用户的设备电量太可笑了,但是我认为必须有一些好的做法,我必须请勿使用firebase或GCM,并且我一定不能关闭Socket并在很晚的时间内打开它,并让用户感到巨大的延迟,因为它将分散用户对我应用程序的注意力……]

那么有什么想法或代码改进之处?

美好的一天。考虑到电池管理的最佳实践,我有一个问题。事先请不要提出建议,也不要建议GCM或Firebase,因为我对它们不感兴趣,我会告诉...
android sockets socket.io battery batterymanager
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.