首页 文章

服务错误“...没有零参数构造函数”

提问于
浏览
0

我想开始服务,我使用:

inner class HomeService : Service() {
    override fun onBind(intent: Intent?): IBinder? {
        return null
    }

    override fun onCreate() {
        super.onCreate()
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        notification(light.toString())
        return START_STICKY
    }

    override fun onDestroy() {
        super.onDestroy()
    }
}

启动它:

val i = Intent(this@Main3Activity, HomeService()::class.java)
startService(i)

我的应用程序崩溃后,logcat返回:

java.lang.Class在Android.app.ActivityThread.ActivityThread $ H.handleMessage的android.app.ActivityThread.-wrap5(ActivityThread.java)android.app.ActivityThread.handleCreateService(ActivityThread.java:3201)上没有零参数构造函数(ActivityThread.java:1586)android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:154)android.app.ActivityThread.main(ActivityThread.java: 6186)位于com.android.internal.os.ZygoteInit.main的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889)的java.lang.reflect.Method.invoke(Native Method)( ZygoteInit.java:779)引起:java.lang.InstantiationException:java.lang.Class在android.app.ActivityThread.handleCreateService的java.lang.Class.newInstance(Native Method)中没有零参数构造函数(ActivityThread.java: 3198)在Android.app.Handler.dispatchMessage上的android.app.ActivityThread.-wrap5(ActivityThread.java)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1586) ndler.java:102)在android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6186)at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

我该怎么办?

2 回答

  • 3
    class HomeService() : Service() {
        constructor(context: Context) : this() {
            Log.d("TAG","ANOTHER CONSTRUCTOR")
        }
    }
    

    现在您可以通过两种方式使用此服务

    • val intent = Intent(this@Main3Activity, HomeService::class.java)

    • val intent = Intent(this@Main3Activity, HomeService(context)::class.java)

  • 0

    您可以通过在 Intent 创建代码中写下 HomeService() 来手动创建实例 . 创建服务是框架的任务,您可以在不创建实例的情况下传递其类:

    val i = Intent(this@Main3Activity, HomeService::class.java)
    startService(i)
    

    更新:

    除上述内容外,您的 class 也不能成为内部 class . 它可以是嵌套的,但它不能是内部类,因为它们包含对它们所在类的引用 . 这意味着系统无法自行创建服务实例 - 它无法提供外部类供其引用 .

相关问题