`
dana.wang
  • 浏览: 13823 次
社区版块
存档分类
最新评论

WorkManager 的使用及优势

阅读更多
commonj.work.WorkManager

描述:

工作管理器 (commonj.work) API 提供的接口允许应用程序在一个容器中并发地执行多个工作项。

实际上,此 API 就是 java.lang.Thread API 的容器管理替代方法。但是java.lang.Thread API 不适用于受管 Java EE 环境中承载的应用程序。在这样的环境中,WorkManager的效果更好,因为它允许容器全面查看和控制所有执行线程。
注意:
工作管理器 API 不提供故障转移和持久性机制。如果受管服务器环境出现故障或关闭,则当前所有工作都将丢失。

优点:

1. 可以由容器来管理线程
2. 可以协调多个线程共同工作




接口:
WorkManager - 此接口提供一组用于调度要执行工作的调度方法。
系统管理员可在服务器级别定义 WorkManager。WorkManager 实例通过执行 JNDI 查找来获取。受管的环境可以支持多个 WorkManager 实例。请参阅"WebLogic JNDI 编程"。您在部署期间将 WorkManager 配置为 resource-ref。。
Work - 通过此接口,您可以异步运行应用程序代码。通过创建实现此接口的类,您可以创建可通过调度在特定的时间或定义的间隔运行的代码块。换句话说,此为在工作管理器 API 中处理的"工作"。
WorkItem - 在将 Work 实例提交给 WorkManager 后,WorkManager 将返回一个 WorkItem。此 WorkItem 用于确定整个 Work 实例的状态。
WorkListener - WorkListener 接口是一个回调接口,它在 WorkManager 与 Work 实例中定义的调度工作之间建立通信。

WorkItem item = WorkManager.schedule(Work work, WorkListener wl);

可以使用 WorkListener 确定 Work 项的当前状态。
注意:
WorkListener 实例总与通过 WorkManager 调度 Work 的初始线程在同一个 JVM 中执行。


web.xml:
<resource-ref>
<res-ref-name>wm/ThreadsWorkManager</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

Java code:
可以在Listener 或 servlet中用以下代码来获取WorkManager。
WorkManager wm =(WorkManager)ic.lookup("java:comp/env/wm/ThreadsWorkManager");
wm.schedule(new OpenWOWork());



public class OpenWOWork implements Work{
private boolean isRun = true;
public void run() {
     while(isRun ){
     //add code
     }
}

public void release() {
    isRun = false; //
}

  public boolean isDaemon() {
     return true;
  }

}


Work Manager具有两个无可比拟的优势:
1. 使多个Work之间协作起来,例如使用监听器,当一个任务完成后再开始另一个任务。

2. 线程由服务器统一管理起来,如果服务器的将该应用停掉,就会shut down 所有的work,当然你也可以选择不shut down. 但是它提供了这个的功能让用户在使用时可以保证不会因为多次部署而导致应用产生多个线程在跑。

分享到:
评论

相关推荐

    安卓定时运行

    WorkManager的优势在于其灵活性和可靠性,即使在设备重启后也能保证任务的执行。使用WorkManager的流程: 1. 创建WorkRequest(OneTimeWorkRequest或PeriodicWorkRequest),指定任务类型和执行间隔。 2. 使用...

    Android mvvm快速搭建解析.pdf

    在实际开发中,结合Navigation进行页面间的流程管理,利用koin进行依赖注入和生命周期管理,通过Retrofit2处理网络请求,以及使用WorkManager来调度后台任务,能够构建出一个高效、可靠、易维护的Android应用。...

    存储毕业设计的安卓端APP(使用java语言).zip

    使用Java的优势包括其广泛的应用、强大的社区支持和丰富的库资源。开发者可以利用Android SDK(软件开发工具包)和Android Studio进行编程,这两个工具为创建和调试Android应用提供了必要的平台。 描述 "存储毕业...

    Android 高级知识

    - 使用AsyncTask、Handler、Looper和Thread进行后台操作是Android开发中的基础,但更高级的是理解如何利用IntentService、JobScheduler或WorkManager来执行后台任务,确保任务的延迟执行和电池效率。 3. **内存...

    Android代码优化技巧汇总

    使用AsyncTask、IntentService或WorkManager进行后台处理。 14. **使用ProGuard和R8进行代码混淆**:这不仅可以减小APK大小,还可以提高代码安全性。 15. **优化数据库操作**:减少数据库查询次数,使用SQLite的...

    Android面试常见问题

    - Android Jetpack组件的最新进展,如Hilt依赖注入、WorkManager任务调度等。 - Android 12的新特性,如Material Design 3、隐私控制等。 面试时,除了理论知识,面试官还会考察问题解决能力、项目经验以及对新...

    Android高手进阶指南

    2. **Jetpack组件库**:讲解Jetpack的各个组件,如Lifecycle、Room、WorkManager、Navigation等,如何提高开发效率和代码质量。 3. **Android性能优化**:包括UI流畅度优化、内存优化、耗电优化,以及使用Profiler...

    android面试题.zip

    - Jetpack组件:Lifecycle、Room、WorkManager等的使用。 - Kotlin:了解其特性,对比Java的优势,以及如何在项目中应用。 - Jetpack Compose:基于现代的声明式UI系统,简化Android UI开发。 10. **设计模式**...

    kotlin-guides,一套为Android编写Kotlin的指南。.zip

    6. **Jetpack 组件**:介绍如何与 Room 数据库、ViewModel、Navigation、WorkManager 等 Jetpack 组件结合使用 Kotlin。 7. **插件与工具**:涵盖如何利用 Kotlin 的 Gradle 插件优化构建过程,以及 Android Studio...

    android面试题大全

    14. **Android Jetpack组件**:理解Room数据库、Navigation、WorkManager、Lifecycle等Jetpack组件的用途和使用方法。 15. **Kotlin语言特性**:如扩展函数、协程、高阶函数、数据类、空安全等,以及与Java相比的...

    Android应用源码面试题-IT计算机-毕业设计.zip

    13. **Jetpack组件**:学习Android Jetpack官方组件库,包括Room(数据库)、Navigation(导航)、WorkManager(后台任务)等,了解它们的优势和使用场景。 14. **安全**:讨论如何保护应用的安全,如数据加密、...

    安卓面试大全

    - Kotlin:语言特性,如协程、扩展函数、空安全等,以及在Android开发中的优势。 在面试准备中,不仅要理解和掌握这些知识点,还要通过实践项目来巩固和深化理解。同时,关注Android开发者博客和社区,了解最新的...

    android面试相关问题总结

    20. **Jetpack组件**:了解Room、WorkManager、ViewModel、LiveData等Jetpack组件的用途和使用方法。 以上知识点只是Android面试中的一小部分,面试通常还会涉及到最新的开发趋势和技术,例如Jetpack Compose(UI...

    android高级进阶

    9. **Kotlin语言特性**:如果教程涉及到Kotlin,会讲解其高阶函数、协程、扩展函数等特性,以及如何在Android开发中充分利用Kotlin的优势。 10. **Android安全**:包括权限管理、代码混淆、SSL/TLS验证、数据加密等...

    spring TaskExecutor.docx

    通过这种方式,你可以轻松地在服务中执行异步任务,同时利用Spring的依赖注入和配置管理优势,确保线程池的正确使用和管理。总的来说,Spring的TaskExecutor抽象层提供了强大的线程池管理和任务调度能力,让开发者...

    Android-一个高级的Android模板项目

    模板项目可能广泛使用了Jetpack组件,如Navigation、Paging、Lifecycle和WorkManager等。 10. **Material Design**:遵循Material Design指南,模板项目可能使用了Material Components库,提供了一致的UI设计和交互...

    android 面试题总结

    2. **RxJava**:掌握流式编程思想,理解Observable和Observer,及操作符的使用。 3. **Retrofit**:网络请求库,学习如何配置和使用,处理网络错误。 4. **Dagger2**或Hilt:依赖注入框架,理解注入原理和优势。 ...

    Pro Android with Kotlin [Sencod Edition]

    它包括一系列库、工具和服务,如Architecture Components(用于构建可维护的架构)、Room(持久化库)、WorkManager(后台任务管理)和LiveData(用于数据观察)。通过学习Jetpack,开发者可以更好地管理应用程序的...

Global site tag (gtag.js) - Google Analytics