전역변수
Calendar cal = Calendar.getInstance();

timePicker 로 받은 시간을
timepicker listener를 override 한 메소드인 onTimeSet 에서

Date date = new Date();
date.setHours(hourOfDay);
date.setMinutes(minutes);
cal.setTime(date);
cal 의 시간을 지정해주었습니다.

그리고나서 나중에 알람지정 메소드에서 다음과 같이
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10*1000, sender);  
하였더니 지정한 시간에(오차10초~1분가량있었음) 알람이 잘 작동하였습니다.

하지만 예를 들어 현재 시간이 오후 3:50분이라고 가정할때 현재시간보다 이전시간으로 (예를들어 오후 3:40분)  알람을 맞추면
알람이 일단 한번 한번 작동한뒤에  50분이 되고나서 부터 다시 알람이 작동하더군요.
뭔가 문제가 있는것 같아 여기저기 뒤져서 다음과 같이 바꿔보았습니다.

long firstTime = SystemClock.elapsedRealtime();
firstTime += cal.getTimeInMillis();
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 10*1000, sender);

아예 작동이 안되더군요. ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP 이런것들에 대한
표로 나와있는 설명은 여기저기 블로그에 나와있긴 하던데 읽어봐도 뭔소린지 잘 이해가 안가구요.
SystemClock.elapsedRealtime() 이것도 뭔지 모르겠어요..

고수님들의 도움이 절실합니다.