Java 安卓通知栏冻结

Java 安卓通知栏冻结,java,android,notifications,progress-bar,Java,Android,Notifications,Progress Bar,这是我正在使用的代码 问题是,经过一段时间(文件变得更重)后,通知栏的下拉速度变慢,最后它就冻结了 您的通知太频繁了。这就是它结冰的原因。让他们在更大的时间间隔内更新。Ok是每秒或2秒一次 这个解决方案对我有效(丑陋但有效): romhandler.sendMessage(新消息());,它每1.5秒被调用一次,之后,handler会额外增加150毫秒,总共1.65秒,所以这是一个很长的时间,还是有错误?如果放置不正确,请尝试使用日志查看调用处理程序的频率。唯一可以冻结你的应用程序的是在UI线

这是我正在使用的代码


问题是,经过一段时间(文件变得更重)后,通知栏的下拉速度变慢,最后它就冻结了

您的通知太频繁了。这就是它结冰的原因。让他们在更大的时间间隔内更新。Ok是每秒或2秒一次

这个解决方案对我有效(丑陋但有效):


romhandler.sendMessage(新消息());,它每1.5秒被调用一次,之后,handler会额外增加150毫秒,总共1.65秒,所以这是一个很长的时间,还是有错误?如果放置不正确,请尝试使用日志查看调用处理程序的频率。唯一可以冻结你的应用程序的是在UI线程中运行大量的处理任务,这就是你案例中的处理程序。将时间增加到3秒,现在它达到37%,并且仍然不会冻结,我需要等待,看看它是否冻结,正如我说的,在处理程序中添加一些日志,并在logcat中查看处理程序的调用频率是否高于您设置的频率。我在AsyncTask的doInBackground()方法中使用System.currentTimeMillis()来减慢通知发送的速度。这很难看,但它工作得很好,避免了用太多通知事件淹没系统。请参阅下面我的解决方案。
private static int mPercentDownloaded;

@Override
protected Void doInBackground(String... params) {
...
        mPercentDownloaded = (int) ((total * 100) / lenghtOfFile);
        long currentDownloadTicks = System.currentTimeMillis();
        if (currentDownloadTicks > mDownloadTicks + 1000) {
                publishProgress(mPercentDownloaded);
                mDownloadTicks = currentDownloadTicks;
        }
...
}