2

PendingIntentAlarmManager을 사용하여 알람 시계 앱을 만들고 있습니다. PendingIntent를 취소하려면 정확히 다시 생성해야합니다. 내 앱에는 다른 알람 시계 앱과 마찬가지로 알람이 켜지거나 꺼지는 스위치가있는 알람 목록이 있습니다. 끌 때, 나는 현재 PendingIntent를 다시 다음과 같은 사용을 취소 : 코드의나중에 취소 할 수 있도록 PendingIntent를 객체에 저장하는 것은 나쁜 습관입니까?

Intent intent = new Intent(context, MyBroadcastReceiver.class); 
String id = this.getId().replaceAll("[^0-9]+", ""); 
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, id, intent, 0); 
alarmIntent.cancel(); 

처음 3 줄을 내가 필요하다고 생각보다. 알람을 토글 할 때, 알람의 다른 많은 세부 사항과 함께 id가 포함 된 사용자 정의 알람 객체에 액세스 할 수 있습니다. 새 알람을 만들 때 새로 생성 된 PendingIntent를 알람 객체에 저장하면 알람을 생성하는 데 사용 된 PendingIntent에 액세스 할 수 있으며 다음과 같이 1 행에서 검색하고 취소 할 수 있습니다.

this.getPendingIntent().cancel(); 

인 텐트를 다시 만들거나 ID를 가져 오거나 앞에서 설명한 코드에서 PendingIntent를 다시 만들 필요가 없습니다. 이것은 궁극적으로 시간과 자원을 절약 할 수 있지만 (좋은 것은 아니지만) 두 가지 질문이 있습니다.

1) PendingIntent를 객체에 저장하고 나중에 다시 생성하는 대신 문제가 있습니까? 그것은 솔직한 대답처럼 보이지만 전에는 아무도 보지 못했습니다.

2) 내가 모르는 PendingIntent를 재현 할 때 이점이 있습니까?

감사합니다.

답변

2

개체에 PendingIntent를 저장하고 나중에 다시 만드는 대신 사용합니까?

기본 Intent 일부 대규모 페이로드가 발생하지 않는 것을 가정하면 (예를 들어, 여분의 Bitmap), 당신은 확인을해야합니다.

간단히 대답하는 것처럼 보이지만 전에는 아무도 보지 못했습니다.

https://github.com/commonsguy/cw-omnibus/tree/v8.7/AlarmManager/Simple 비록 사소한 예입니다.

내가 모르는 PendingIntent를 재현 할 때 이점이 있습니까?

PendingIntent이없는 경우에 적합합니다. 당신의 과정은 영원히 살지 않습니다. 캐시 된 PendingIntent을 최적화로 사용하려는 경우 괜찮습니다. 그러나 필요한 경우 PendingIntent을 생성하려면 적절한 위치에 있어야합니다.

+0

도움 주셔서 감사합니다. 그래서 다른 사람에게 메시지를 보내는 방법을 모르겠지만 내 다른 질문을 볼 수 있습니까? https://stackoverflow.com/questions/45381092/how-to-stop-alarm-from-executing-after-intend-has- 접수 된 안드로이드 – Michael