Фоновая служба использует слишком много памяти - PullRequest
0 голосов
/ 24 октября 2018

Для моего друга, который является глухим и слепым, я пытаюсь создать приложение (для умных часов и телефона), которое предупреждает его, когда кто-то звонит в дверной звонок.Умные часы будут вибрировать, и таким образом он узнает, что кто-то находится перед дверью.

Чтобы узнать, звонит ли кто-нибудь в дверной звонок, я создал сервер, который отправляет сообщение на телефон через разъемы.Телефон будет прослушивать это в службе, а затем, когда он получит сообщение, он отправит данные через API уровня данных на умные часы для вибрации.

Теперь у меня работает фоновая служба, но она используетпуть к большой памяти.Несколько дней спустя я увидел на телефоне сообщение, в котором говорилось, что приложение использует слишком много памяти, поэтому оно автоматически закрывает приложение.Мой вопрос заключается в том, что использует много памяти в моем сервисе?Библиотека сокетов io, которую я использую, не предназначена для использования в фоновом режиме?

(Также каждые несколько минут пользователь отключается от сервера и повторно подключается, это продолжается)

Вотсервис, который я создал:

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import nl.example.messenger.Messenger;

public class SocketIOService extends Service {

    private final static String mSocketUrl = "https://example.io/";
    private Socket mSocket;
    private Messenger mMessenger;
    private final LocalBinder mBinder = new LocalBinder();

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

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

    @Override
    public boolean onUnbind(Intent intent) {
        return false;
    }

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

        initializeSocket();
        addSocketHandlers();

        mMessenger = new Messenger(this);
    }

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    private void initializeSocket() {
        try{
            IO.Options options = new IO.Options();
            options.forceNew = true;
            mSocket = IO.socket(mSocketUrl, options);
        }
        catch (Exception e){
            Log.e("Error", "Exception in socket creation");
            throw new RuntimeException(e);
        }
    }

    private void closeSocketSession(){
        mSocket.disconnect();
        mSocket.off();
    }

    private void addSocketHandlers(){

        mSocket.on("message", new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                mMessenger.sendMessage("Socket: Got a new message.");
            }
        });

        mSocket.connect();
    }
}

1 Ответ

0 голосов
/ 24 октября 2018

Вам необходим инструмент GC для определения местоположения утечки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...