我想开始服务,我使用:
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 回答
现在您可以通过两种方式使用此服务
val intent = Intent(this@Main3Activity, HomeService::class.java)
val intent = Intent(this@Main3Activity, HomeService(context)::class.java)
您可以通过在
Intent
创建代码中写下HomeService()
来手动创建实例 . 创建服务是框架的任务,您可以在不创建实例的情况下传递其类:更新:
除上述内容外,您的 class 也不能成为内部 class . 它可以是嵌套的,但它不能是内部类,因为它们包含对它们所在类的引用 . 这意味着系统无法自行创建服务实例 - 它无法提供外部类供其引用 .