Is Realm создает утечку памяти в android - PullRequest
0 голосов
/ 25 января 2020

Я использую Realm для локальной базы данных, я использовал в Timer и каждые 40 секунд проверял, существуют ли данные, я устанавливаю переменные syn c, после этого процесса я закрывал область realm.close , мне интересно, что , Является ли приведенный ниже код утечкой памяти, потому что я создаю объект Realm каждые 40 секунд, я закрыл его, наконец, но у меня есть сомнения по этому поводу? это вызывает утечку памяти или нет

 //Timer starts for sending LogTable data
    Log.i("Timer Start","Start Timer");
    timer = new Timer();
    timerTask = new TimerTask() {
        @Override
        public void run() {


            jsonArray = new JsonArray();
            jsonObject = new JsonObject();

            //Realm.init(context);
            Realm realm = Realm.getDefaultInstance();
            try {
                realm.executeTransaction(realm1 -> {
                    //getting all data from realm DB
                    RealmResults<LogTable> realmResults = realm.where(LogTable.class).equalTo("sync", (String) null).findAll();
                    Log.i("RealmResults Login Table:", "" + realmResults.size());

                    for (int i = 0; i < realmResults.size(); i++) {
                        jsonObject.addProperty("dev_userid", realmResults.get(i).getDev_userid());
                        jsonObject.addProperty("date", realmResults.get(i).getDate());
                        jsonObject.addProperty("logtype", realmResults.get(i).getLogtype());
                        jsonObject.addProperty("logtext", realmResults.get(i).getLogtext());
                        jsonObject.addProperty("logErrorCode", realmResults.get(i).getLogErrorCode());

                        jsonArray.add(jsonObject);

                        if (i != 0) {

                            mSocket.emit("signalSendDeviceLogRtc", jsonArray.toString(), (Ack) args -> {

                                Log.i("callback of LogRtc", "" + args);
                                Object result = args[0];
                                if (result.equals(true)) {
                                    Log.i("reult of LogRtc", "" + result);
                                    Realm realm2 = Realm.getDefaultInstance();
                                    try {
                                        RealmResults<LogTable> realmResults2 = realm2.where(LogTable.class).equalTo("sync", (String) null).findAll();
                                        realm2.executeTransaction(realm21 -> {
                                            int count = 0;
                                            for (LogTable logTable : realmResults2){
                                                logTable.setSync("1");
                                                count++;
                                                if (count == 10)
                                                    break;
                                            }
                                        });
                                    }catch (Exception e){
                                        e.printStackTrace();
                                    }finally {
                                        realm2.close();
                                    }
                                }
                            });

                            jsonArray = new JsonArray();
                            jsonObject = new JsonObject();
                        }
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                 realm.close();
            }
            Log.i("Timer","Works");

        }
    };
    timer.scheduleAtFixedRate(timerTask,1000,40000);
...