我已经实现了commonsware清醒库,并且最多可以正常工作。但有时我得到以下例外:
01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):无法启动接收器com.commonsware.cwac.wakeful.AlarmReceiver:java.lang.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):at java.lang.reflect.Method.invokeNative(Native Method) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at java.lang.reflect.Method.invoke(Method.java:511) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1027) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at dalvik.system.NativeStart.main(Native Method) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):引起:java.lang.NullPointerException 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.commonsware.cwac.wakeful.AlarmReceiver.getListener(AlarmReceiver.java:66) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.commonsware.cwac.wakeful.AlarmReceiver.onReceive(AlarmReceiver.java:36) 01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2280) 01-11 04:24:00.018 E / CustomExceptionHandler - Exception statcktrace(7397):... 10 more
正如您所看到的,这起源于AlarmReceiver.getListener()。如果有人能对此有所了解,我会很感激。
我还尝试了一种不同的方法,即避免使用监听器资源xml文件(这是我怀疑此异常的根本原因)。我通过创建一个扩展com.commonsware.cwac.wakeful.AlarmReceiver并覆盖getListener()的自定义类来实现这一点。我还更改了清单文件中的引用。但是,由于某种原因,现在根本不调用sendWakefulWork,并且不执行预定服务。
请帮助。
答案 0 :(得分:1)
您在清单中缺少com.commonsware.cwac.wakeful
<meta-data>
,因为line 66 of AlarmReceiver.java
是尝试读取该元数据的第一行。我能想到这一点的唯一一次可能只会发生在破碎的ROM或应用程序的黑客版本上(由于某种原因元数据被剥离)。如果是编码错误(例如,您将<meta-data>
元素放在错误的位置),它应该始终发生。
我是通过创建扩展com.commonsware.cwac.wakeful.AlarmReceiver并覆盖getListener()的自定义类来实现的。
WakefulIntentService
不支持这一点。如果您不想使用AlarmReceiver
,那很好,但不要致电scheduleAlarms()
或cancelAlarms()
。相反,只需使用sendWakefulWork()
,如the "Basic Usage" section of the documentation中所述。