Выполнение темы Android замедляется при блокировке экрана - PullRequest
0 голосов
/ 13 сентября 2018

Я выполняю эту процедуру, чтобы загрузить некоторые данные и вставить их в базу данных. Общая процедура занимает около 5 минут. Я заметил, что при загрузке, когда телефон блокирует экран и открывает его через 5 минут, он все равно загружается. Кажется, когда заблокированная процедура загрузки замедляется. Есть ли объяснение?

Время выполнения также замедляется при нажатии кнопки «Домой» и становится фоновым процессом, а не только при блокировке экрана.

Спасибо

public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase sInstance;

@VisibleForTesting
public static final String DATABASE_NAME = "Database_db";

public abstract CustomerDao repoCustomer();


public static AppDatabase getInstance(Context context) {

    if (sInstance == null) {
        synchronized (AppDatabase.class) {
            if (sInstance == null) {
                sInstance = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME).build();

            }
        }
    }
    return sInstance;
}


public void downloadCustomers(final String table){

        executors.diskIO().execute(new Runnable() {
            @Override
            public void run() {
               //download data and insert into database.
             });
        }  
}

1 Ответ

0 голосов
/ 13 сентября 2018

Я считаю, что это связано с управлением питанием.Вы пробовали использовать блокировку пробуждения?

Чтобы проверить, является ли это вашей проблемой, просто добавьте android: keepScreenOn = "true" в макет действия, в котором запущен поток.

Еслиэто решает проблему, и вам не нужен экран, подумайте о прочтении этой темы:

https://developer.android.com/training/scheduling/wakelock

Чтобы получить пробуждение от замка, вы должны добавить это в свой манифест:

<uses-permission android:name="android.permission.WAKE_LOCK" />

И установить вручную блокировку пробуждения:

val wakeLock: PowerManager.WakeLock =
        (getSystemService(Context.POWER_SERVICE) as PowerManager).run {
            newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply {
            acquire()
        }
    }

Чтобы вручную разблокировать ее, вы можете сделать это с помощью:

wakelock.release()

Кроме того, из того же источника, и кажетсямне, что это может быть применено к вашей проблеме, проверьте это:

Перед добавлением поддержки wakelock в ваше приложение, подумайте, поддерживают ли варианты использования вашего приложения одно из следующих альтернативных решений:

"Если ваше приложение выполняет длительную загрузку HTTP, рассмотрите возможность использования DownloadManager. Если ваше приложение синхронизирует данные с внешнего сервера, рассмотрите возможность создания адаптера синхронизации. Если ваше приложение использует фоновые службы, рассмотрите возможностьиспользуя JobScheduler или Firebase Cloud Messaging для запуска этих служб через определенные промежутки времени. "

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...