Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 工人停了一会儿_Android_Upload_Background Process_Worker - Fatal编程技术网

Android 工人停了一会儿

Android 工人停了一会儿,android,upload,background-process,worker,Android,Upload,Background Process,Worker,在我的android应用程序中,我使用workerManger每隔15分钟将一些数据上传到我的服务器,然后我决定在4台设备上进行测试: 1.华为荣誉4x(安卓:5.1.1,api级别:22) 2.三星Galaxy A8 2016(android:8.0.0,api级别:26) 3.三星A30(安卓:10,api级别:29) 4.Realme5Pro(android:10,api级别:29) 不幸的是,每个设备都有不同的行为 1.华为手机:每小时(不是每15分钟)上传一次数据到服务器 2.三星a8

在我的android应用程序中,我使用workerManger每隔15分钟将一些数据上传到我的服务器,然后我决定在4台设备上进行测试:

1.华为荣誉4x(安卓:5.1.1,api级别:22)
2.三星Galaxy A8 2016(android:8.0.0,api级别:26)
3.三星A30(安卓:10,api级别:29)
4.Realme5Pro(android:10,api级别:29)

不幸的是,每个设备都有不同的行为

1.华为手机:每小时(不是每15分钟)上传一次数据到服务器
2.三星a8手机:工作正常
3.三星a30手机:反复停止上传一段时间后继续
4.Realme手机:在so的前10个环路中工作正常,然后停止工作

所有这些都是在应用程序运行的情况下发生的,我没有重新启动手机,甚至没有关闭应用程序,所以我感觉有点迷茫,不知道如何处理这种大不相同的行为,我甚至尝试使用Stetho(为你的应用程序启用chrome开发工具)查看workManger的数据库,但我没有找到数据库

这是我的工人

const val NETWORK_URL = "URL"
const val REQUEST_METHOD = "REQUEST_METHOD"
const val REQUEST_BODY = "REQUEST_BODY"

private const val TAG = "NetworkWorker"

class NetworkWorker(appContext: Context, workerParams: WorkerParameters) :
Worker(appContext, workerParams) {

private lateinit var mUser: FirebaseUser

override fun doWork(): Result {
    WorkManager.getInstance(applicationContext).pruneWork()

    if (Firebase.auth.currentUser == null) {
        Log.e(TAG, "doWork: user is null")
        return Result.failure()
    } else {
        mUser = Firebase.auth.currentUser!!
    }

    val url = inputData.getString(NETWORK_URL)!!
    val method = inputData.getInt(REQUEST_METHOD, Request.Method.GET)
    val body = if (inputData.getString(REQUEST_BODY) == null) {
        null
    } else {
        JSONObject(inputData.getString(REQUEST_BODY)!!)
    }
    Log.d(TAG, "doWork: body is $body")
    val queue = Volley.newRequestQueue(applicationContext)

    Log.d(TAG, "doWork: url is $url")

    mUser.getIdToken(true)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val idToken = task.result!!.token
                Log.d(TAG, "doWork: token is $idToken")

                val request = object : JsonObjectRequest(method, url, body,
                    Response.Listener { response ->
                        Log.d(TAG, "doWork: $response")
                    },
                    Response.ErrorListener { error ->
                        Log.e(TAG, "doWork: error is", error)
                    }) {

                    override fun getHeaders(): MutableMap<String, String> {
                        val params = HashMap<String, String>()
                        params["Content-Type"] = "application/json"
                        params["Authorization"] = "$idToken"

                        return params
                    }
                }

                queue.add(request)

            } else {
                Log.e(
                    TAG,
                    "doWork: error getting the token",
                    task.exception
                )
            }
        }


    return Result.success()
   }
}
         val constraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

        val uploadLocationWork = PeriodicWorkRequest
         .Builder(NetworkWorker::class.java, 15, TimeUnit.MINUTES)
         .setInputData(
            workDataOf(
            NETWORK_URL to "http://10.1.0.11:8000/api/location",
            REQUEST_BODY to json,
            REQUEST_METHOD to Request.Method.POST))
        .setConstraints(constraints)
        .build()

    WorkManager
        .getInstance(this)
        .enqueueUniquePeriodicWork(
            "testWorkManger",
            ExistingPeriodicWorkPolicy.KEEP,
            uploadLocationWork)