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

mdu*_*ucc 3 android android-service kotlin

我想启动一个服务,我使用:

\n\n
inner class HomeService : Service() {\n    override fun onBind(intent: Intent?): IBinder? {\n        return null\n    }\n\n    override fun onCreate() {\n        super.onCreate()\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        notification(light.toString())\n        return START_STICKY\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

启动它:

\n\n
val i = Intent(this@Main3Activity, HomeService()::class.java)\nstartService(i)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n

java.lang.Class\n 没有零参数构造函数\n 在 android.app.ActivityThread.handleCreateService(ActivityThread.java:3201)\n 在 android.app.ActivityThread.-wrap5(ActivityThread.java)\n 在 android. app.ActivityThread$H.handleMessage(ActivityThread.java:1586)\n 在 android.os.Handler.dispatchMessage(Handler.java:102)\n 在 android.os.Looper.loop(Looper.java:154)\n在 android.app.ActivityThread.main(ActivityThread.java:6186)\n 在 java.lang.reflect.Method.invoke(本机方法)\n 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:889)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)\n 引起:java.lang.InstantiationException: java.lang.Class\n 没有零参数构造函数\n在 java.lang.Class.newInstance(本机方法)\n 在 android.app.ActivityThread.handleCreateService(ActivityThread.java:3198)\n 在 android.app.ActivityThread.-wrap5(ActivityThread.java)\xc2\xa0\ n 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586)\xc2\xa0\n 在 android.os.Handler.dispatchMessage(Handler.java:102)\xc2\xa0\n 在 android.os。 Looper.loop(Looper.java:154)\xc2\xa0\n 在 android.app.ActivityThread.main(ActivityThread.java:6186)\xc2\xa0\n 在 java.lang.reflect.Method.invoke(本机方法)\xc2\xa0\n 位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)\xc2\xa0\n 位于 com.android.internal.os.ZygoteInit.main(ZygoteInit.java :779)

\n
\n\n

我应该怎么办?

\n

zsm*_*b13 6

HomeService()您通过写下创建代码来手动创建实例Intent。创建服务是框架的任务,您可以传递它的类而不创建实例:

val i = Intent(this@Main3Activity, HomeService::class.java)
startService(i)
Run Code Online (Sandbox Code Playgroud)

更新:

除了上述之外,你的类也不能是内部类。它可以嵌套,但不能是内部类,因为它们保存对其所在类的引用。这意味着系统无法自行创建服务的实例 - 它无法提供外部类供其引用。