首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在暂停模式下不支持此操作

在暂停模式下不支持此操作
EN

Stack Overflow用户
提问于 2021-12-10 23:47:25
回答 1查看 466关注 0票数 0

以下内容一直在为Robolectro4.2工作

代码语言:javascript
复制
@Implements(AsyncTask.class)
public class MyShadowAsyncTask<Params, Progress, Result>
    extends ShadowAsyncTask<Params, Progress, Result> {

  @Implementation
  @SuppressWarnings("unchecked")
  public AsyncTask<Params, Progress, Result> executeOnExecutor(
      Executor executor, Params... params) {
    return super.execute(params);
  }
}

方法.execute似乎不再存在于4.4中

所以我试着

  1. ShadowLegacyAsyncTask
代码语言:javascript
复制
@Implements(AsyncTask.class)
public class CmbShadowAsyncTask<Params, Progress, Result>
    extends ShadowLegacyAsyncTask<Params, Progress, Result> {

  @Implementation
  @SuppressWarnings("unchecked")
  public AsyncTask<Params, Progress, Result> executeOnExecutor(
      Executor executor, Params... params) {
    return super.executeOnExecutor(executor, params);
  }
}

抓到我

代码语言:javascript
复制
Exception in thread "AsyncTask #1" java.lang.RuntimeException: java.lang.UnsupportedOperationException: post is not supported in PAUSED LooperMode
    at org.robolectric.shadows.ShadowLegacyAsyncTask$1.done(ShadowLegacyAsyncTask.java:66)
    at java.base/java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381)
    at java.base/java.util.concurrent.FutureTask.set(FutureTask.java:232)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:272)
    at org.robolectric.shadows.ShadowLegacyAsyncTask$3.run(ShadowLegacyAsyncTask.java:127)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.UnsupportedOperationException: post is not supported in PAUSED LooperMode
    at org.robolectric.android.internal.LooperDelegatingScheduler.post(LooperDelegatingScheduler.java:62)
    at org.robolectric.shadows.ShadowLegacyAsyncTask$1.done(ShadowLegacyAsyncTask.java:43)
    ... 7 more

this action is not supported in PAUSED mode.
java.lang.IllegalStateException: this action is not supported in PAUSED mode.
    at org.robolectric.shadows.ShadowLooper.assertLooperMode(ShadowLooper.java:27)
    at org.robolectric.shadows.ShadowApplication.getBackgroundThreadScheduler(ShadowApplication.java:113)
    at org.robolectric.shadows.ShadowLegacyAsyncTask.execute(ShadowLegacyAsyncTask.java:104)
    at android.os.AsyncTask.execute(AsyncTask.java)
  1. ShadowPausedAsyncTask
代码语言:javascript
复制
@Implements(AsyncTask.class)
public class CmbShadowAsyncTask<Params, Progress, Result>
    extends ShadowPausedAsyncTask<Params, Progress, Result> {

  @Implementation
  @SuppressWarnings("unchecked")
  public AsyncTask<Params, Progress, Result> executeOnExecutor(
      Executor executor, Params... params) {
    return super.executeOnExecutor(executor, params);
  }
}

抓到我

代码语言:javascript
复制
this action is not supported in PAUSED mode.
java.lang.IllegalStateException: this action is not supported in PAUSED mode.
    at org.robolectric.shadows.ShadowLooper.assertLooperMode(ShadowLooper.java:27)
    at org.robolectric.shadows.ShadowApplication.getBackgroundThreadScheduler(ShadowApplication.java:113)
    at org.robolectric.Robolectric.getBackgroundThreadScheduler(Robolectric.java:346)
    at org.robolectric.Robolectric.flushBackgroundThreadScheduler(Robolectric.java:353)

Java版本11级版本6.7.1 AGP版本4.3.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-14 19:17:30

根据Robolectric的维护者,迁移步骤如下

  1. 旧ShadowLegacyAsyncTask
  2. 每次测试都使用@LooperMode(LEGACY)
  3. 在每个测试中将shadowOf(Looper.getMainLooper()).idle()添加到每个触发器中

参考资料:https://github.com/robolectric/robolectric/issues/6925

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70311538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档