标签: workmanagers

Android WorkManager 未启动工作线程

我想在应用程序启动时从服务器下载某些文件。所以我尝试使用工作管理器,它从我的自定义应用程序类中排队。但是 Worker 类没有被触发,状态只是入队,不会进入运行状态.下面是我的代码:

应用类:

@Override
public void onCreate() {
    Constraints constraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            //.setRequiresStorageNotLow(true)
            //.setRequiresBatteryNotLow(true)
            .build();

    OneTimeWorkRequest request = new OneTimeWorkRequest
            .Builder(MyWorker.class)
            //.setConstraints(constraints)
            //.setInitialDelay(1,TimeUnit.SECONDS)
            .addTag("download")
            .build();

    WorkManager.getInstance(getApplicationContext()).getWorkInfoByIdLiveData(request.getId()).observeForever(new Observer<WorkInfo>() {
        @Override
        public void onChanged(WorkInfo workInfo) {
            if (workInfo == null) {
                Log.d("download", "workInfo == null");
            } else {
                Log.d("download", "workInfo != null: " + workInfo.getState().toString());//This is giving ENQUEUED once..thats it
            }
        }
    });
    WorkManager.getInstance(getApplicationContext()).enqueue(request);
}
Run Code Online (Sandbox Code Playgroud)

我的工人类

public class MyWorker extends Worker {

public MyWorker(@NonNull Context context, @NonNull …
Run Code Online (Sandbox Code Playgroud)

android workmanagers android-workmanager androidx

9
推荐指数
0
解决办法
5755
查看次数

Weblogic 10.3.x中"Stuck Thread Max Time"和"Max Stuck Thread Time"之间有什么区别?

Weblogic 10.3.6管理控制台有两个与Stuck Threads时间配置相关的参数.

一个在:Servers -> Some_Server -> Configuration -> Tuning有参数:Stuck Thread Max Time

其他在:Servers -> Some_Server -> Configuration -> Overload有参数:Max Stuck Thread Time

在我做的一些测试中,只有Overload配置中的参数似乎触发了Failure Action相同的选项卡配置.我无法弄清楚Tuning选项卡中的参数是什么.在Oracle oficial文档中,两个参数具有相同的描述,但与不同的MBean相关:

[Stuck Thread Max Time] ServerMBean.StuckThreadMaxTime(http://docs.oracle.com/cd/E21764_01/apirefs.1111/e13952/pagehelp/Corecoreserverserverconfigtuningtitle.html)

[Max Stuck Thread Time] ServerFailureTriggerMBean.MaxStuckThreadTime(http://docs.oracle.com/cd/E21764_01/apirefs.1111/e13952/pagehelp/Corecoreserverserverconfigoverloadtitle.html)

我的问题是,这些参数之间有什么区别?

weblogic weblogic11g workmanagers

8
推荐指数
1
解决办法
1万
查看次数

WorkManager setRequiresDeviceIdle 令人困惑

我已经实施了一个预定的工作经理。我的想法是每2小时完成一个过程。但我需要保证执行。根据工作管理器的文档,每个排队的进程都将被保证执行。

但是现在这个setRequiresDeviceIdle让我感到困惑。文档中指出,默认情况下setRequiresDeviceIdle已设置为false。所以我假设如果设备处于空闲模式,我的进程将无法工作。

空闲模式=当手机屏幕关闭一段时间

但是如果我将此setRequiresDeviceIdle设置为true。我假设现在它只会在设备处于空闲模式时工作

即使设备处于空闲状态或未处于空闲状态,我也希望进程完成。我现在该怎么办?

android workmanagers android-workmanager

7
推荐指数
1
解决办法
3043
查看次数

使用WorkManager在Jetty上启用编程并发

我设法将CommonJ-JSR 237 Timer&WorkManager API(http://commonj.myfoo.de)的自定义实现配置为JNDIJetty 6和8上的资源,但它仅适用于全局范围.
有了这个解决方案JNDI资源的名称是wm/WorkManager,我需要它java:comp/env/wm/WorkManager,但由于限制,我不能用java:comp/env在全局JNDI名称,因为它保留到应用程序作用域的资源.
我创建了一个名为{jetty.home}/etc/jetty-wtm.xml并添加到的新配置文件{jetty.home}/start.ini.
以下是jetty-wtm.xmlJetty 6的内容,对于更大的版本,它有点不同,但也有效:

<!-- =============================================================== -->
<!-- Configure Server Time and Work Managers                         -->
<!-- =============================================================== -->

<Configure id="Server" class="org.mortbay.jetty.Server">


    <New id="WorkManager" class="org.mortbay.jetty.plus.naming.Resource">
        <Arg>wm/WorkManager</Arg>
        <Arg>
            <New class="de.myfoo.commonj.work.FooWorkManager">
                <Arg>
                    <New id="threadPool" class="de.myfoo.commonj.util.ThreadPool">
                        <Arg type="int">0</Arg>
                        <Arg type="int">10</Arg>
                        <Arg type="int">2</Arg>
                    </New>
                </Arg>
            </New>
        </Arg>
    </New>

    <New id="TimeManager" class="org.mortbay.jetty.plus.naming.Resource">
        <Arg>tm/TimeManager</Arg>
        <Arg>
            <New class="de.myfoo.commonj.timers.FooTimerManager">
                <Arg>
                    <New id="threadPool" class="de.myfoo.commonj.util.ThreadPool">
                        <Arg type="int">0</Arg>
                        <Arg …
Run Code Online (Sandbox Code Playgroud)

java jndi jetty commonj workmanagers

6
推荐指数
1
解决办法
473
查看次数

类型不匹配:推断的类型是 PluginRegistry?但 FlutterEngine 是预料之中的

我想使用 Flutter Workmanager,我在我的 .kt 中做了这样的引用配置:

package com.example.mybackprocess

import be.tramckrijte.workmanager.WorkmanagerPlugin
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugins.GeneratedPluginRegistrant

class App : FlutterApplication(), PluginRegistry.PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()
        WorkmanagerPlugin.setPluginRegistrantCallback(this)
    }

    override fun registerWith(reg: PluginRegistry?) {
        GeneratedPluginRegistrant.registerWith(reg)
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经改变android:name

android:name=".App"
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

在调试模式下在 G3212 上启动 lib\main.dart... e:E:\mybackprocess\android\app\src\main\kotlin\com\example\mybackprocess\MainActivity.kt: (15, 48): 类型不匹配:推断类型是 PluginRegistry?但 FlutterEngine 是预料之中的

FAILURE:构建失败,出现异常。* 出了什么问题:任务 ':app:compileDebugKotlin' 执行失败。编译错误。查看日志了解更多详情

尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。* 在https://help.gradle.org获得更多帮助

BUILD FAILED in 55s Gradle task assembleDebug failed with exit code 1 …

workmanagers flutter

6
推荐指数
1
解决办法
6667
查看次数

在GlassFish和Spring 3中使用CommonJ实现

为了统一Websphere 7和GlassFish 3环境中的部署,我决定尝试在GlassFish中实现CommonJ WorkManager和TimerManager.但它没有按预期工作.我做了以下事情:

使用在http://commonj.myfoo.de/上找到的myFOO CommonJ实现,并将库包含到我的domain/lib文件夹中(包括Spring库)

将以下内容添加到<resources>glassfish domain.xml 的部分:

<custom-resource res-type="commonj.work.WorkManager" jndi-name="wm/default" factory-class="de.myfoo.commonj.work.FooWorkManagerFactory"></custom-resource>
<custom-resource res-type="commonj.timers.TimerManager" jndi-name="tm/default" factory-class="de.myfoo.commonj.timers.FooTimerManagerFactory"></custom-resource>
Run Code Online (Sandbox Code Playgroud)

在domain.xml 的<servers>/ <server>section中包含引用:

  <resource-ref ref="wm/default"></resource-ref>
  <resource-ref ref="tm/default"></resource-ref>
Run Code Online (Sandbox Code Playgroud)

在我的测试应用程序的web.xml中添加适当的资源引用:

<resource-ref>
    <description>WorkManager</description>
    <res-ref-name>wm/default</res-ref-name>
    <res-type>commonj.work.WorkManager</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<resource-ref>
    <description>TimerManager</description>
    <res-ref-name>tm/default</res-ref-name>
    <res-type>commonj.timers.TimerManager</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

将以下bean添加到我的applicationContext.xml:

<bean id="threadTestTaskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor"> 
    <property name="workManagerName" value="wm/default" />
    <property name="resourceRef" value="true"/>
</bean>

<bean id="threadTestTimerExecutor" class="org.springframework.scheduling.commonj.TimerManagerTaskScheduler"> 
    <property name="timerManagerName" value="tm/default" />
    <property name="resourceRef" value="true" />
    <property name="shared" value="false" />
</bean>

<bean id="threadTest" class="test.ThreadTester"></bean>

<task:scheduled-tasks scheduler="threadTestTimerExecutor">
    <task:scheduled …
Run Code Online (Sandbox Code Playgroud)

spring glassfish commonj java-ee workmanagers

5
推荐指数
1
解决办法
5262
查看次数

如何在Java EE环境中创建线程?

我有一个要求,我必须在表中保留一些数据,持久可能需要一些时间.基本上我想坚持一个日志.我不希望执行等到持续完成.

我知道我必须使用线程来完成这项任务,我知道不鼓励在企业应用程序中创建线程.

所以我开始阅读有关工作管理器的知识,并在websphere应用服务器8.5中理解并尝试了一个示例程序.

我在websphere中使用了asynchbeans.jar,现在我很困扰我正在编写特定于供应商的代码.

然后我遇到了在Oracle java文档中描述的commonj work api.现在我想使用fabric3的commonj api.

我怀疑的是,有没有更好的方法来完成同样的任务?一种EJB方式?或者工作经理对我的要求有好处吗?

java multithreading workmanagers java-ee-6 websphere-8

5
推荐指数
1
解决办法
2851
查看次数

在 api 27、28、29 中混淆应用程序时,工作管理器不会运行

我有一个每 15 分钟运行一次的定期任务。

当混淆应用程序时。如果应用程序从后台被终止,工作管理器将不起作用。

测试设备:一加7T、诺基亚5+、Google Pixel 2模拟器

仅当应用程序位于前台或后台时,工作管理器才会执行。

禁用 proguard 工作管理器在所有 3 种情况下都有效

  1. 该应用程序位于前台

  2. 该应用程序在后台运行

  3. 该应用程序从后台被杀死

根据我在https://issuetracker.google.com/issues/160492142#上提出的问题

proguard 文件中可能存在问题。

 #noinspection ShrinkerUnresolvedReference
 -keepattributes *Annotation*
 -keepattributes SourceFile,LineNumberTable
 # prevent Crashlytics obfuscation
 -keep class com.crashlytics.** { *; }
 -dontwarn com.crashlytics.**
 
 
 -keep public class * extends java.lang.Exception
 -keep class com.google.android.gms.measurement.AppMeasurement { *; }
 
 
 ###################################################################################################
 
 # Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
 # EnclosingMethod is required to use InnerClasses.
 -keepattributes Signature, InnerClasses, EnclosingMethod
 
 # Retrofit does reflection …
Run Code Online (Sandbox Code Playgroud)

android proguard workmanagers android-workmanager

5
推荐指数
1
解决办法
2059
查看次数

Android Work Manager-Work Manager是否会100%确保完成后台执行?

根据我从文档https://developer.android.com/topic/libraries/architecture/workmanager中阅读的内容,

它说:

即使您的应用被强制退出或设备重新启动,该任务仍然可以保证运行。

那么这意味着,无论如何,在后台执行的任务都会100%执行到完成为止。

例如:

应用程序具有执行工作管理器实施的按钮,该按钮可将数据上传到在线数据库,但需要Internet连接才能上传数据。因此,我的应用程序当前处于离线模式,然后单击按钮。

我的不确定性:

工作管理器是否会在后台运行该过程,并在没有Internet连接的情况下继续重试该过程?并且仅完成并停止该过程,直到建立Internet连接并完成数据上传?

android workmanagers android-workmanager

3
推荐指数
1
解决办法
3371
查看次数

WorkManager 只需要在特定的时间间隔内工作,如何使用工作管理器约束?工作经理示例

我是第一次与工作经理合作,我已经成功地实施了它。

我每 30 分钟定位一次以跟踪员工。

我在数据库第一次同步时启动了我的工作管理器,但我想在每天晚上停止它。

这是MyWorker.java

public class MyWorker extends Worker {

    private static final String TAG = "MyWorker";
    /**
     * The desired interval for location updates. Inexact. Updates may be more or less frequent.
     */
    private static final long UPDATE_INTERVAL_IN_MILLISECONDS = 10000;
    /**
     * The fastest rate for active location updates. Updates will never be more frequent
     * than this value.
     */
    private static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS =
            UPDATE_INTERVAL_IN_MILLISECONDS / 2;
    /**
     * The current location.
     */ …
Run Code Online (Sandbox Code Playgroud)

android location alarmmanager workmanagers android-workmanager

3
推荐指数
1
解决办法
1301
查看次数

WorkManager:getInstance()已弃用

在版本2.1.0中不推荐使用WorkManager.getInstance()

依赖关系:

implementation 'androidx.work:work-runtime:2.1.0'
Run Code Online (Sandbox Code Playgroud)

此方法或任何其他方式有什么变化?

android deprecated workmanagers android-workmanager

2
推荐指数
2
解决办法
870
查看次数