面包丁未正确显示 - 面包丁队列不知何故卡住了



我在面包丁通知库方面遇到了一个严重的问题,当我快速切换我的活动时,有时(确实经常)更新的面包丁不再显示,例如缺少凭据或"先插入日期",所以用户没有任何信息,有什么问题。

例如,还有简单的用例:登录到应用程序,注销

尝试重新登录,但使用虚假凭据,不再显示面包片了。

我试过了: Courton.clearAllNotifcations() in inPause(),此外, Crouton.clearCroutonsForActivity(this) 在 onPause() 中也是如此,

也许可以解决问题,但它没有。

我也在 CroutonLibrary调试过,问题似乎是,一个 Crouton 被添加到队列中,活动完成,某些东西完成(比如 aSyncTask 在 onPostExecute() 中显示一个 crouton),这个再次被添加到队列中,然后队列被卡住。

此外,.clearAllNotifications(实际上清除队列)不起作用,因为之后添加了courton(asynctask在acitvity.finish()之后完成),并且问题仍然存在。

还尝试过:

   @Override
    protected void onDestroy() {
         Crouton.clearCroutonsForActivity(this);
         Crouton.cancelAllCroutons();
         super.onDestroy();
     }

已知问题:https://github.com/keyboardsurfer/Crouton/issues/24但也没有用...

感谢任何建议!:)

您已经在 Crouton 上找到了正确的问题以及负责产生该问题的代码部分。

在您的情况下,它与仍在运行的AsyncTask相关,而您的Activity实际上应该已经被销毁了。将长时间运行的行为从面向用户的组件中移出通常是一件好事,即使用服务层。

在此之前,取消AsyncTask应该可以解决问题。

谢谢@keyboardsurfer解释...

添加。。。并将异步任务提取到成员变量...

@Override
    protected void onPause() {
        Crouton.clearCroutonsForActivity(this);
        if (loadTasksTask != null) {
            loadTasksTask.cancel(true);
        }
        super.onPause();
    }

修复了问题! :)非常感谢:)

最新更新