android–ScheduledThreadPoolExecutor用于定期任务(使用Retrofit)只需触发一次而不再重复

android–ScheduledThreadPoolExecutor用于定期任务(使用Retrofit)只需触发一次而不再重复,第1张

概述我有以下代码用于每隔X秒从服务器轮询未读通知计数我通过App.onCreate()中的ScheduledThreadPoolExecutor启动此过程Log.d("XXX","RequestingNotificationcountfromserver...");被调用一次(我可以在Logcat中看到),但两个Retrofit回调函数都没有被调用(实际上没有Retrofi

我有以下代码用于每隔X秒从服务器轮询未读通知计数

我通过App.onCreate()中的ScheduledThreadPoolExecutor启动此过程

Log.d("XXX", "Requesting Notification count from server ...");

被调用一次(我可以在Logcat中看到),但两个Retrofit回调函数都没有被调用(实际上没有Retrofit调试日志).更重要的是,“从服务器请求通知计数……”永远不会再次打印(即周期性任务没有运行)

我正在使用Retrofit进行其他webservice调用(在用户输入时)并且它们工作正常(我可以在logcat中看到传入和传出的请求/响应)

public class App extends Application  {    private scheduledexecutorservice scheduleTaskExecutor;    ...    @OverrIDe    public voID onCreate() {        super.onCreate();        //region Set up the periodic notification count Listener task        scheduleTaskExecutor= Executors.newScheduledThreadPool(2);        scheduleTaskExecutor.scheduleAtFixedrate(new PeriodicNotifCountFetchTask(), 0, 5, TimeUnit.SECONDS);        //endregion    }    class PeriodicNotifCountFetchTask implements Runnable {        @OverrIDe        public voID run() {            Log.d("XXX", "Requesting Notification count from server ...");            EMRestClIEnt.getmEMRestService().getNotificationCount(new Callback<NotificationCount>() {                @OverrIDe                public voID success(NotificationCount response, Response unused) {                    int unreadNotifCount = response.getCount();                    Log.d("XXX", "Successfully fetched notification count, unread = " + response.getCount());                    if (unreadNotifCount>0){                        // call Listener to repaint menu                        for (NewNotificationListener x :notifListeners){                            x.onNewNotificationReceived(response.getCount());                            }                    }                }                @OverrIDe                public voID failure(RetrofitError error) {                    Log.d("XXX", "Failed to fetch notification count from server");                }            });        }    }}

代码的改进部分在这里:

    @POST("/notification/notification_count/")    voID getNotificationCount(Callback<NotificationCount> callback);

解决方法:

可能会发生一些异常,因为后续调用将被抑制. ScheduledThreadPoolExecutor only “ticking” once

因此,尝试将您的代码放在runOnUiThread的runnable中,如Scheduling recurring task in Android

总结

以上是内存溢出为你收集整理的android – ScheduledThreadPoolExecutor用于定期任务(使用Retrofit)只需触发一次而不再重复全部内容,希望文章能够帮你解决android – ScheduledThreadPoolExecutor用于定期任务(使用Retrofit)只需触发一次而不再重复所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1119163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存