2015-06-13 3 views
0

Я написал простой сервис, в котором есть один широковещательный приемник, который прослушивает входящие sms-сообщения и записывает информацию о сообщении в базу данных. Проблема в том, что каждый раз, когда сообщение получено, использование ОЗУ службы увеличивается на 1-2 МБ.Ошибка использования ОЗУ Android с широковещательным приемником в службе

// Init 
smsRecFilter.setPriority(999); 
smsRecFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
registerReceiver(smsReceiver, smsRecFilter); 

// Implementation 
private class SMSreceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
     SmsMessage smsMsg; 
     Object[] smsPdus = (Object[])extras.get("pdus"); 
     if (smsPdus != null) { 
     InfoHolder holder = new InfoHolder(); 
     if (holder != null) { 
      holder.Type = InfoTypes.SMS_REC; 
      for (int i = 0; i < smsPdus.length; i++) { 
       smsMsg = SmsMessage.createFromPdu((byte[])smsPdus[i]); 
       if (smsMsg != null) { 
        if (i == 0) { 
        holder.Number = smsMsg.getOriginatingAddress(); 
        holder.DateTime = MillisToDate(smsMsg.getTimestampMillis()); 
        } 
        holder.MsgBody += smsMsg.getMessageBody().toString(); 
       } 
       } 
       m_db.Insert(holder); 
      } 
     } 
    } 
} 

}

UPDATE

Метод вставки:

my Insert() function: 

private boolean Insert(InfoHolder holder) 
    { 
     try { 
      ContentValues values = new ContentValues(); 
      if (values != null) { 
       values.put(DBase.COLUMN_TYPE,  holder.Type); 
       values.put(DBase.COLUMN_NUMBER, holder.Number); 
       values.put(DBase.COLUMN_MSGBODY, holder.MsgBody); 
       values.put(DBase.COLUMN_CALL_DUR, holder.CallDuration); 
       values.put(DBase.COLUMN_DATETIME, holder.DateTime); 
       mDB.insert(DB_TABLE_NAME, null, values); 
       values.clear(); 
      } 
     } 
     catch(Exception e) {return false;} 

     return true; 
    } 

ответ

0

Я не вижу каких-либо очевидной утечки памяти, может быть, у вас есть проблемы в ORM слое при вызове m_db.Insert(). Попробуйте позвонить System.gc() до конца, чтобы заставить сборщик мусора запустить и посмотреть, уменьшается ли использование ОЗУ

+0

после проблемы System.gc(). – Kralj

+0

попробуйте оставить вызов System.gc() и прокомментировать insert(). Таким образом, вы можете проверить, есть ли проблема внутри или снаружи этого метода – wezzy