Abhishek Mehta
Abhishek Mehta

Reputation: 1

WorkManager Worker does not work after 2 or 3 days on the MIUI OS

Here is my background upload service when I am making a work request

package com.unischolarz.calllogger.utils
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.IBinder
import android.os.PowerManager
import android.util.Log
import androidx.work.Constraints
import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import java.util.UUID

class BackgroundService() : Service() {

    private var wakeLock: PowerManager.WakeLock? = null

    override fun onCreate() {
        val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakeLockTag")
        wakeLock?.acquire(10 * 60 * 1000L /*10 minutes*/)
    }

    override fun onBind(intent: Intent?): IBinder? {
        return null
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        if (intent == null) {
            return START_STICKY
        }

        if (intent.getBooleanExtra("ACTION", false)) {
//            performNetworkTask()
            Logger.e("networkIntent", "Inetent Received1")
        }
        return START_STICKY
    }

    override fun onDestroy() {
        super.onDestroy()

        wakeLock?.let {
            if (it.isHeld) {
                it.release()
            }
        }
        val broadcastIntent = Intent("ACTION.RESTART.YourService")
        sendBroadcast(broadcastIntent)

    }

    private fun performNetworkTask() {
        val constraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

        val workRequest = OneTimeWorkRequestBuilder<LogUpdateWorker>()
            .setConstraints(constraints)
            .addTag(UUID.randomUUID().toString())
            .build()


        WorkManager.getInstance(this).enqueue(workRequest)
        Log.d("WorkRequest", workRequest.toString())
        Log.d("MakingWrk", "Making Work")
    }

}

And here is my WorkManager

package com.unischolarz.calllogger.utils

import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import androidx.work.CoroutineWorker
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.unischolarz.calllogger.main.MainActivityViewModel

class LogUpdateWorker(private val appContext: Context, workerParams: WorkerParameters) :
    CoroutineWorker(appContext, workerParams) {

    private val sharedPrefs: SharedPreferences =
        appContext.getSharedPreferences("UPLOAD_PREFS", Context.MODE_PRIVATE)

    override suspend fun doWork(): Result {
        try {
            synchronized(this) {
                val currentTime = System.currentTimeMillis()

                val uploadStartTimestamp1 = sharedPrefs.getLong("UPLOAD_START_TIMESTAMP1", 0)
                if (currentTime - uploadStartTimestamp1 > MainActivityViewModel.UPLOAD_TIMEOUT) {
                    sharedPrefs.edit().putBoolean("UPLOAD_IN_PROGRESS1", false).apply()
                }

                val isUploadInProgress1 = sharedPrefs.getBoolean("UPLOAD_IN_PROGRESS1", false)

                Log.d("UPLOAD_IN_PROGRESS4", "$currentTime |||| $uploadStartTimestamp1")
                Log.d("UPLOAD_IN_PROGRESS4", "$isUploadInProgress1")

                if (!isUploadInProgress1) {
                    sharedPrefs.edit()
                        .putLong("UPLOAD_START_TIMESTAMP1", currentTime)
                        .apply()

                    Log.d("UPLOAD_IN_PROGRESS4", "INITIALIZING UPLOAD IN BACKGROUND AFTER CALL")
                    MainActivityViewModel().getAllData2(appContext)
                    Log.d("UPLOAD_IN_PROGRESS4", "UPLOAD COMPLETED IN BACKGROUND AFTER CALL")
                } else {
                    Log.d("UPLOAD_IN_PROGRESS4", "UPLOAD ALREADY IN PROGRESS")
                }
            }
        } catch (e: Exception) {
            Log.e("UPLOAD_IN_PROGRESS4", "Exception: ${e.message}")
            logException(e)
            sharedPrefs.edit().putBoolean("UPLOAD_IN_PROGRESS1", false).apply()
            return Result.failure()
        }
        return Result.success()
    }
}

I've already taken the permission for the auto start and battery optimization, still after 2 or 3 days the WorkManger is not executing my Worker on MIUI at the same time, it works perfectly fine on Samsung devices.

I am expecting my code to work same on MIUI as it does on Samsung devices.

Upvotes: 0

Views: 23

Answers (0)

Related Questions