2015-01-11 8 views
0

나는 깨어있는 공통 라이브러리를 구현했으며 대부분 잘 작동합니다. java.lang의 : 수신기 com.commonsware.cwac.wakeful.AlarmReceiver를 시작할 수 없습니다 : - : 24 :cwac-wakeful library - AlarmReceiver에서 NullPointerException이 발생했습니다.

01-11 04 : 예외 statcktrace (7397) 00.018 E/CustomExceptionHandler 그러나 때때로 나는 다음과 같은 예외를 얻을. NullPointerException 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : java.lang.RuntimeException : 수신자를 시작할 수 없습니다. com.commonsware.cwac.wakeful.AlarmReceiver : java.lang.NullPointerException 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android.app.ActivityThread.handleReceiver (ActivityThread.java:2287) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android에서 .app.ActivityThread.access $ 1600 (ActivityThread.java:140) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1313) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android.os.Handler.dispatchMessage (Handler.java:99) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android.os.Looper.loop (Looper. java : 137) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android.app.ActivityThread.main (ActivityThread.java:4921) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : java.lang.reflect.Method.invokeNative (네이티브 메소드) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : java.lang.reflect.Method.invoke에서 (Method.java:511) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : dalvik. system.NativeStart.main (네이티브 메소드) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : 원인 : java.lang.NullPointerException 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : com.commonsware.cwac.wakeful.AlarmReceiver.getListener (AlarmReceiver.java:66) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : com.commonsware.cwac. wakeful.AlarmRece01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) : android.app.ActivityThread.handleReceiver (ActivityThread.java:2280) 01-11 04 : 24 : 00.018 E/CustomExceptionHandler - 예외 statcktrace (7397) ... 10 당신은) (이 AlarmReceiver.getListener에서 유래 볼 수 있듯이

더. 누군가가 이것에 대해 밝힐 수 있다면 고맙겠습니다.

또한 리스너 리소스 xml 파일을 전혀 사용하지 않는 다른 접근법을 시도했습니다.이 예외는 의심스러운 근본 원인입니다. 나는 com.commonsware.cwac.wakeful.AlarmReceiver와 overriden getListener()를 확장하는 커스텀 클래스를 생성함으로써 그렇게했다. 나 또한 매니 페스트 파일에서 참조를 변경했습니다. 그러나 어떤 이유로 인해 sendWakefulWork가 전혀 호출되지 않고 예약 된 서비스가 실행되지 않습니다.

도와주세요.

답변

1

매니페스트에 com.commonsware.cwac.wakeful<meta-data>이 누락되었습니다 (line 66 of AlarmReceiver.java은 해당 메타 데이터를 읽는 첫 번째 줄임).내가 생각할 수있는 유일한 시간은 깨진 ROM 또는 해킹 된 앱 버전 (일부 이유로 메타 데이터가 삭제 된 부분)에서만 발생할 수 있습니다. 코딩 오류 (예 : 잘못된 위치에 <meta-data> 요소가있는 경우)가 발생해야합니다.

내가 한 그 com.commonsware.cwac.wakeful.AlarmReceiver 및 오버라이드 (override) getListener()를 확장하는 사용자 정의 클래스를 만들어.

WakefulIntentService은 지원하지 않습니다. AlarmReceiver을 사용하지 않으려면 scheduleAlarms() 또는 cancelAlarms()으로 전화하지 마십시오. 대신 the "Basic Usage" section of the documentation에 설명 된대로 sendWakefulWork()을 사용하십시오.

+0

"때로는 다음과 같은 예외가 발생합니다."라고 말하면 일부 사용자에게는이 문제가 발생한다는 의미입니다. 현재 프로덕션 환경에서 귀하의 라이브러리를 사용하고 있으며 일부 사용자는이 문제를 겪고 있습니다. 나는 정확히 요소를 매니페스트에 배치했고 내 테스트에서는이 예외가 발생하지 않습니다. – AsafK

+0

나는 당신이 AlarmReceiver (XML 리소스를 사용하고 있기 때문에)를 사용하는 것을 피하고 싶지만 스케줄 된 작업으로 서비스를 실행하고 싶다면 어떻게 할 것인가? 유일한 직업은 sendWakefulWork를 호출하고 예약 된 작업으로 AlarmManager를 사용하여이 수신기를 설정하는 자체 수신자를 생성해야합니까? – AsafK

+0

@AsafK : "sendWakefulWork를 호출하고이 수신자를 AlarmManager로 예약 된 작업으로 설정하는 것만 큼 자신의 수신기를 만들어야합니까?" -- 예. – CommonsWare