首页 > 解决方案 > Android 服务中的 Hilt 注入

问题描述

我想在Service. 让我们看看下面的代码:

class DeviceUtil @Inject constructor() {
   ...
}

@AndroidEntryPoint
class LocationUpdateService : Service() {

    @Inject
    lateinit var deviceUtil: DeviceUtil

    ...
}

@Inject lateinit var deviceUtil: DeviceUtil在 Activity 中工作正常,但在Service.

它给出了错误: kotlin.UninitializedPropertyAccessException: lateinit property deviceUtil has not been initialized

标签: androiddependency-injectiondagger-2dagger-hilt

解决方案


对于像我这样的傻瓜。正如 OP 在评论中所说,一个完整的例子,你可以service像这样注入对象:

import android.app.Service
import android.content.Intent
import android.os.Binder
import android.os.IBinder
import android.util.Log
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

import com.yourapp.services.UserService

@AndroidEntryPoint
class MyService: Service() {
    @Inject lateinit var userService: UserService

    override fun onCreate() {
        super.onCreate()

        userService.getUserList()
                .subscribe { userList -> Log.d("tag", "users: $userList") }
    }

    override fun onBind(intent: Intent?): IBinder? {
        return object: Binder() {
            // ...
        }
    }
}

至于您要注入的服务,请确保它的构造函数中有 @Inject 注释,如下所示:

class UserService @Inject() constructor() {
  // ...
}

推荐阅读