通过设置更高优先级的线程可以提高我的服务性能吗?

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

我编写了一个应用程序,基本上每隔几秒钟截取一次屏幕截图并对该图像进行一些分析。 整个工作基本上是在线程内完成的,并且该线程是在前台服务中创建和启动的。

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
         testThread = new TestThread(MyService.this, true, username, email);
         testThread.start();
         sendNotification("Running...");
    }

我的主要目标是表现。为什么?因为我使用计算机视觉算法后几个小时后我的服务就被终止了。

首先,我想说我选择了 Service 而不是 WorkManager,因为它是一个运行时间非常长的任务(它应该运行无限长的时间)。

通过阅读本文:https://developer.android.com/topic/performance/threads#java我了解到前台组中的线程从设备获得大约 95% 的总执行时间,而后台组则获得大约5%。 现在,由于我的线程是在服务中创建并启动的,默认情况下优先级应该是

-2
,即
THREAD_PRIORITY_FOREGROUND
,我对吗?通过设置像 Int
THREAD_PRIORITY_URGENT_AUDIO
这样的更高优先级,我会提高服务的性能,从而使我的服务持续更长时间吗?谢谢。

java android multithreading performance service
1个回答
0
投票

来自Java并发实践

避免使用线程优先级的诱惑,因为它们会增加 平台依赖性并可能导致活性问题。并发最多 应用程序可以对所有线程使用默认优先级。

如果更改线程优先级。这只是对操作系统任务调度程序的请求,并不能保证!操作系统会尝试为高优先级线程分配更多资源,但它不保证这一点。因此,如果您的程序依赖于线程优先级,那么您反过来将程序绑定到底层操作系统,这是不好的。

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