服务错误“...没有零参数构造函数”
Posted
技术标签:
【中文标题】服务错误“...没有零参数构造函数”【英文标题】:Service error "... has no zero argument constructor" 【发布时间】:2018-12-06 00:51:50 【问题描述】:我想启动一个服务,我使用:
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.handleCreateService(ActivityThread.java:3201) 在 android.app.ActivityThread.-wrap5(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6186) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 引起:java.lang.InstantiationException:java.lang.Class 没有零参数构造函数 在 java.lang.Class.newInstance(本机方法) 在 android.app.ActivityThread.handleCreateService(ActivityThread.java:3198) 在 android.app.ActivityThread.-wrap5(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6186) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
我该怎么办?
【问题讨论】:
【参考方案1】:您通过在Intent
创建代码中写下HomeService()
来手动创建实例。创建服务是框架的任务,你可以在不创建实例的情况下传递它的类:
val i = Intent(this@Main3Activity, HomeService::class.java)
startService(i)
更新:
除了上述之外,你的类也不能是内部类。它可以嵌套,但不能是内部类,因为它们持有对它们所在类的引用。这意味着系统无法自行创建服务实例 - 它无法提供外部类供其引用。
【讨论】:
我注册了!! 对。它工作。但是当我通过 context: HomeService(val context: Context) : Service() 时,我在清单中得到同样的错误: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)
【讨论】:
以上是关于服务错误“...没有零参数构造函数”的主要内容,如果未能解决你的问题,请参考以下文章
InstantiationException:没有零参数构造函数?
超类 'Bloc<xxx, xxx>' 在 dart 中没有零参数构造函数
Xamarin Android java.lang.InstantiationException:java.lang.Class 没有零参数构造函数