我要启动服务,我使用:
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)
我该怎么办?
答案 0 :(得分:4)
您正在通过在HomeService()
创建代码中写下Intent
来手工创建实例。创建服务是框架的任务,您可以在不创建实例的情况下传递其类:
val i = Intent(this@Main3Activity, HomeService::class.java)
startService(i)
更新:
除上述内容外,您的课程也不能成为内部课程。它可以嵌套,但不能是内部类,因为它们持有对内部类的引用。这意味着系统无法独自创建服务的实例-它无法提供外部类供其引用。
答案 1 :(得分:0)
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)