Job Scheduler通过startService()获得的性能提升

时间:2018-05-29 11:18:18

标签: android performance android-jobscheduler

Oreo,如果应用不在前台,服务将无效,但我们可以使用JobSchedular执行后台操作。

那么JobSchedulerstartService()之间的区别是什么,以及为什么android支持JobSchedular而非startService()来自oreo的后台操作。

我仍然可以ScheduleJobs来自背景,它也会影响电池性能。

2 个答案:

答案 0 :(得分:4)

  

从奥利奥,如果应用不在前台,服务将无效

是的,它会的。它只需要是一个前台服务。

  

那么JobScheduler和startService()

之间真正区别的是什么

<!DOCTYPE html> <html lang="en"> <head> <title>Bootstrap Example</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <h2>Carousel Example</h2> <div id="myCarousel" class="carousel slide" data-ride="carousel"> <!-- Indicators --> <ol class="carousel-indicators"> <li data-target="#myCarousel" data-slide-to="0" class="active"></li> <li data-target="#myCarousel" data-slide-to="1"></li> <li data-target="#myCarousel" data-slide-to="2"></li> </ol> <!-- Wrapper for slides --> <div class="carousel-inner"> <div class="item active"> <img src="https://blog.keycdn.com/blog/wp-content/uploads/2015/10/jpg-to-webp-1.jpg" alt="Los Angeles" style="width:100%;"> <div class="carousel-caption"> <h3>Los Angeles</h3> <p>LA is always so much fun!</p> </div> </div> <div class="item"> <img src="https://www.enterprise.ca/content/dam/ecom/general/Homepage/inspiration-banff-ca.jpg.wrend.1280.720.jpg" alt="Chicago" style="width:100%;"> <div class="carousel-caption"> <h3>Chicago</h3> <p>Thank you, Chicago!</p> </div> </div> <div class="item"> <img src="http://www.personal.psu.edu/ivs5030/plant.jpg" alt="New York" style="width:100%;"> <div class="carousel-caption"> <h3>New York</h3> <p>We love the Big Apple!</p> </div> </div> </div> <!-- Left and right controls --> <a class="left carousel-control" href="#myCarousel" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left"></span> <span class="sr-only">Previous</span> </a> <a class="right carousel-control" href="#myCarousel" data-slide="next"> <span class="glyphicon glyphicon-chevron-right"></span> <span class="sr-only">Next</span> </a> </div> </div> </body> </html>是即时的。使用startService()安排的作业不是。 JobScheduler可以将工作推迟到以后需要完成其他工作的时间,以最大限度地减少耗电量(对于CPU,WiFi,移动数据等)。

此外,JobScheduler总是会发生。使用startService()安排的作业可能不会。您可以在作业上放置条件(例如,需要网络连接),只有满足条件才会运行作业。

  

以及为什么android支持JobSchedular而不是startService()用于来自oreo的后台操作。

功耗,主要是据我所知。

  

我仍然可以从背景安排大量的工作,它也会影响电池性能。

是的,但Google有一个更好的API,可以在将来控制它。如果开发者滥用JobScheduler,Android的未来版本可以进一步限制作业,扩展作业的打盹模式,等等。

答案 1 :(得分:2)

来自Android开发者网站:

  

框架将在执行作业时智能化,并且   尝试尽可能地批量和推迟它们。通常如果你   没有指定工作的截止日期,它可以随时运行   取决于JobScheduler的内部队列的当前状态。

     

当作业正在运行时,系统会代表您的作品保留一个唤醒锁   应用程序。因此,您无需采取任何措施来保证   设备在工作期间保持清醒状态。

当您启动后台服务时,即使应用程序位于后台,它也会运行,因此它会使用资源。使用JobScheduler时,资源仅分配并用于特定作业,并在完成后释放。