gpt4 book ai didi

java - Android ScheduledThreadPoolExecutor 原因 : null

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:31 25 4
gpt4 key购买 nike

我用这个把我的头发扯掉了!我是 Android 的新手,所以我确信这是非常明显的事情。

我收到一个 ScheduledThreadPoolExecutor 异常,其中 cause: null

我想要的只是一个单独的线程,只要 Activity 在屏幕上,它就会运行!

// Instance Variables
private ScheduledExecutorService m_oScheduledExecutor = null;

@Override
protected void onResume()
{
super.onResume();

if (oScheduledExecutor == null)
{
oScheduledExecutor = Executors.newSingleThreadScheduledExecutor();
}

try
{
oScheduledExecutor.scheduleAtFixedRate({Runnable Instance HERE}, 0, 10, TimeUnit.SECONDS);
}
catch (Exception e)
{
System.out.println("(MainActivity) Error: " + e.getMessage() + " Cause: " + e.getCause());
}
}

@Override
protected void onStop()
{
super.onStop();
m_oScheduledExecutor.shutdown();
}

编辑:整个堆栈跟踪....

java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@41976688 rejected from java.util.concurrent.ScheduledThreadPoolExecutor@4195c7f8[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1979)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:786)
at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:300)
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:545)
at java.util.concurrent.Executors$DelegatedScheduledExecutorService.scheduleAtFixedRate(Executors.java:619)
at com.example.wifitest.MainActivity.onResume(MainActivity.java:61)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
at android.app.Activity.performResume(Activity.java:5182)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1276)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

您不能“回收”ExecutorService。调用 shutdown() 后,尝试安排任何任务都会导致拒绝,在您的情况下,拒绝策略是抛出 RejectedExecutionException

如果您跟踪堆栈跟踪,您可以在 ScheduledThreadPoolExecutor 中看到:

/**
* Specialized variant of ThreadPoolExecutor.execute for delayed tasks.
*/
private void delayedExecute(Runnable command) {
if (isShutdown()) {
reject(command);
return;
}
// ...
}

将您的执行程序服务保留为实例变量在这里对您不起作用:一旦关闭,就无法再次使用。

关于java - Android ScheduledThreadPoolExecutor 原因 : null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19143427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com