【问题标题】:Calling WakefulIntentService.sendWakefulWork causes runtimeexception调用 WakefulIntentService.sendWakefulWork 导致 runtimeexception
【发布时间】:2013-04-22 13:55:38
【问题描述】:

当这段代码运行时,它给了我一个异常 RuntimeException。我还没有向 WakeWork.class 添加任何代码。关于为什么会爆炸的任何想法?

这是从我的“接收器上”警报中调用的。

   Intent i = new Intent(context, WakeWork.class);
   WakefulIntentService.sendWakefulWork(context, i);

manifest.xml
<service android:name="com.PageP.WakeWork"></service>

WAKEWORK.CLASS

package com.PageP;

import android.content.Intent;

public class WakeWork extends WakefulIntentService {

public WakeWork(String name) {
    super(name);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(){
    super.onCreate();
}

@Override
protected void doWakefulWork(Intent intent) {
    // TODO Auto-generated method stub

}
}

错误

    Thread [<1> main] (Suspended (exception RuntimeException))  
        ActivityThread.handleCreateService(ActivityThread$CreateServiceData) line: 2346 
        ActivityThread.access$1600(ActivityThread, ActivityThread$CreateServiceData) line: 126  
        ActivityThread$H.handleMessage(Message) line: 1221  
        ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
        Looper.loop() line: 137 
        ActivityThread.main(String[]) line: 4560    
        Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
        Method.invoke(Object, Object...) line: 511  
        ZygoteInit$MethodAndArgsCaller.run() line: 784  
        ZygoteInit.main(String[]) line: 551 
        NativeStart.main(String[]) line: not available [native method]  

长猫

04-22 10:32:04.127: W/AsyncTask(9004): com.PageP.GrabURL.doInBackground(GrabURL.java:36) 04-22 10:32:04.127: W/AsyncTask(9004): 在 com.PageP.GrabURL.doInBackground(GrabURL.java:1) 04-22 10:32:19.080: E/AndroidRuntime(9004): java.lang.RuntimeException: 无法实例化服务 com.PageP.WakeWork: java.lang.InstantiationException: 无法实例化类 com.PageP.WakeWork;没有空的构造函数 04-22 10:32:19.080:E/AndroidRuntime(9004):原因:java.lang.InstantiationException:无法实例化类 com.PageP.WakeWork;没有空的构造函数

【问题讨论】:

  • 请发布整个堆栈跟踪。
  • 我是 Eclipse 新手。我如何到达可以复制/粘贴它的位置。
  • 我相信我已经发布了它......
  • 那是 Eclipse 捕获异常。继续经过这一点,然后在 LogCat 视图中,您将看到完整的堆栈跟踪,并且可以突出显示行并按 Ctrl-C 将它们复制到剪贴板(Windows/Linux - 无论 OS X 的等效键序列) .我的猜测是您的服务未在您的清单中注册。
  • 您可以在上面看到我显示清单条目的位置。那个条目不正确吗?好的,让我尝试获取堆栈跟踪信息...

标签: android alarm wakelock


【解决方案1】:

变化:

public WakeWork(String name) {
    super(name);
    // TODO Auto-generated constructor stub
}

到:

public WakeWork() {
    super("George");
}

(请随意用其他值代替名称)

正如堆栈跟踪向您显示的那样,Android 无法实例化您的服务,因为没有零参数的公共构造函数,这是上述修复解决的问题。

【讨论】:

  • 谢谢!这是我的第一个 android 应用程序,学习 android 的细微差别被证明具有挑战性......
  • @user2250168: IntentService(以及,通过扩展,WakefulIntentService)与大多数 Android 组件不同。通常,我们实现构造函数并继承合适的零参数公共构造函数。无论出于何种原因,IntentService 的作者都要求我们跳过定义我们自己的公共零参数构造函数的过程。
  • 是否允许在 doWakefulWork 中显示活动?
  • @user2250168:如果“允许”是指“技术上是否可行”,那么可以。如果“允许”您的意思是“用户会对此感到满意,还是会以身体伤害威胁我”,那么突然出现的活动可能会落在“身体伤害”方面。你不知道用户当时在前台做什么。通常,您会显示来自IntentServiceNotification
  • 你很有幽默感。我喜欢这样。当我引用一个活动时,它似乎崩溃了。这就是我问的原因。我为此设置了安全卫士。无论用户是否积极使用该应用程序,我的警报都会响起。如果是,我将启动一项活动。但是,在那次尝试中,我遇到了崩溃。唯一的区别是这段代码现在在 doWakefulWork 函数中启动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多