屏幕锁定时,Android线程执行速度减慢

问题描述 投票:1回答:1

我运行此过程来下载一些数据并将它们插入数据库。整个过程大约需要5分钟。我注意到在下载时,当手机锁定屏幕并在5分钟后打开它时,它仍然会下载。似乎当锁定下载程序减慢时。有什么解释吗?

当按下主页按钮并且成为后台进程时,执行时间也会变慢,而不仅仅是当sreen锁定时。

谢谢

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.
             });
        }  
}
android runnable executorservice executor android-thread
1个回答
0
投票

我相信它与电源管理有关。你试过使用唤醒锁吗?

要测试这是否是您的问题,只需将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触发这些服务在特定的时间间隔。“

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.