0

我编写了一个简单的服务,它有一个广播接收器,它监听传入的短信并将有关消息的信息写入数据库。问题是每次收到消息时,服务的 RAM 使用量都会增加 1-2 MB。

// 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);
            }
        }
    }
}

}

更新

插入方法:

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;
    }
4

1 回答 1

0

我看不到任何明显的内存泄漏,也许你在调用 m_db.Insert() 时 ORM 层有问题。尝试在结束前调用 System.gc() 以强制垃圾收集器运行并查看 RAM 使用量是否减少

于 2015-06-13T16:06:51.860 回答