0

지정된 지연 후 버튼을 누르는 알람을 설정하려고합니다.Android에서 AlarmManager를 사용하여 지연된 버튼 누르기를 구현하는 방법

은 내가 자습서를 따랐습니다 : 나는 어떤 경우에, 나는 버튼을 액세스 할 "findViewById를"을 사용할 수 없습니다 정적으로 브로드 캐스트 리시버를 확장하는 클래스를 선언

http://www.learn-android-easily.com/2013/06/scheduling-task-using-alarm-manager.html#comment-form

이 비로소 작동합니다. 이 솔루션은 클래스 다양한 변수로 기본보기를 정의 할 수 어디에

findViewById inside a Static Method

:

비슷한 질문

은에 질문을 받았다. 이것이 유일한 해결책이라면, 어떻게해야합니까?

미리 감사드립니다. 이 문제로 정말 고생했습니다.

+0

지연된 후에 ** 버튼을 누르기 만하면 트리거되는 ** 실제 작업 **이 아닌 왜 버튼을 누르려고합니까? – CommonsWare

+0

토글 버튼이므로 기능을 실행하는 것과는 별도로 상태를 변경해야합니다. 비록 내가하지 않았다면, 정적 인 메소드 내부에서 적절한 클래스에 접근하는 비슷한 문제가있다. – sas

답변

0

AlarmManager은 사용자가 더 이상 앱에 더 이상있을 가능성이없는 충분한 지연이있는 경우를위한 것입니다. 잠시 (예 : 몇 초) 지연 될 경우 AlarmManager을 사용하지 말고 View (예 : ToggleButton 관심이있는)이라는 postDelayed()을 사용하여 원할 때 Runnable을 실행하십시오.

AlarmManager이 적합한 경우 사용자는이 아닐 수도 있습니다. 사용자가 UI에 마지막으로 있었던 때와 AlarmManager 이벤트가 발생할 때 사이에 프로세스가 종료되었을 수 있습니다. 따라서 ToggleButton 또는 UI와 연결된 다른 Java 객체를 가질 수 없습니다. 따라서

AlarmManager 이벤트가 발생할 때 객체에 자신을 실제 비즈니스 로직을 수행하지 의존 할 수 있어야합니다 (당신이 _WAKEUP 알람을 사용하는 경우 직접 혹은 간접적으로 WakefulBroadcastReceiver를 통해 트리거), 당신이 IntentService 할 수있다 더이상 존재하지 않는다. 또한 IntentService은 이벤트 버스 (LocalBroadcastManager, greenrobot의 EventBus, Square 's Otto 등)를 사용하여 "이봐 UI 레이어, 존재한다면 당신을 업데이트 할 수 있습니까?"라고 이벤트를 제기 할 수 있습니다. 액티비티/프래그먼트는 해당 이벤트가 포 그라운드에있을 때 해당 이벤트에 등록 될 수 있으며 이러한 경우 UI를 업데이트 할 수 있습니다. 그렇게하면 AlarmManager 코드가 실제로 ToggleButton을 변경하려고 시도하지 않고도 작업이 완료되고 ToggleButton이 영향을받을 수 있습니다.

+0

버튼이 실제로 사용하는 것은 앱에 구현 된 소켓을 통해 특정 TCP 명령을 보냅니다. 지연은 몇 시간으로 제한되어야합니다. 장치가 지속 시간 동안 잠들 수 있기 때문에 postDelayed()를 사용할 수 없다고 생각합니다. EventBus를 사용하면 어떻게 할 수 있습니까? – sas

+0

@sas : "버튼이 실제 복용량에 따라 앱에서 구현되는 소켓을 통해 특정 TCP 명령을 보내면"- IntentService는 소켓을 설정하고 명령을 보낼 수 있어야합니다. "기기가 지속 시간 동안 잠들 수 있기 때문에 postDelayed()를 사용할 수 없다고 생각합니다."- 2 시간이 지나면 다른 앱의 메모리를 확보하기 위해 프로세스가 이상적으로 종료되었습니다. "EventBus를 사용하면 어떻게 할 수 있습니까?" - 그게 뭐죠? 다음은 UI 업데이트 예제입니다. https : // github.co.kr/commonsguy/cw-omnibus/tree/master/EventBus/GreenRobot – CommonsWare

+0

감사합니다! 나는 지금해야 할 일이 많이 있음을 알았다. – sas

관련 문제