Estoy escribiendo una aplicación para Android con firebase y kotlin. Ahora creé una clase kotlin que extiende la clase Service .
El problema es que después de iniciar el servicio, si cierro la aplicación, ¡se bloquea !
¡Si escribo el mismo código con Java , todo funciona bien! No puedo entender por qué se bloqueó cuando uso kotlin .
Mira mi código a continuación.
miServicio.kt
class myService : Service() { internal var TAG = "tagForLogD" override fun onBind(p0: Intent?): IBinder? { return null } override fun onCreate() { super.onCreate() Log.d(TAG, "myService Created!") } override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { return Service.START_STICKY } override fun onDestroy() { super.onDestroy() Log.d(TAG, "myService destroyed") } }miServicio.java
public class myService extends Service { String TAG = "tagForLogD"; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate(){ super.onCreate(); Log.d(TAG, "myService Created!"); } @Override public int onStartCommand(Intent intent, int flags, int startId){ return Service.START_STICKY; } @Override public void onDestroy(){ super.onDestroy(); Log.d(TAG, "myService destroyed"); } }Gracias por tu apoyo.
Logcat lanza la siguiente excepción
03-10 15:13:53.847 4911-4911/net.beingup.simplechat E/AndroidRuntime: FATAL EXCEPTION: main Process: net.beingup.simplechat, PID: 4911 java.lang.RuntimeException: Unable to start service net.beingup.simplechat.Notification.myService@11a4382f with null: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter intent at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3975) at android.app.ActivityThread.access$2300(ActivityThread.java:218) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1842) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:7007) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter intent at net.beingup.simplechat.Notification.myService.onStartCommand(myService.kt) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3958)Declaraste la intent de no ser nulo en onStartCommand :
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): IntEl parámetro especificado como no nulo es nulo: método kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, intención del parámetro
Entonces, ¿declararlo como Intent? .
Razones por las que el Intent pasado sería NULL en onStartCommand
Google corrigió este error en androidx.lifecycle:lifecycle-service:2.2.0 ;
