我有以下代码用于每隔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)只需触发一次而不再重复所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)