Я написал простой сервис, в котором есть один широковещательный приемник, который прослушивает входящие 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;
}
после проблемы System.gc(). – Kralj
попробуйте оставить вызов System.gc() и прокомментировать insert(). Таким образом, вы можете проверить, есть ли проблема внутри или снаружи этого метода – wezzy