安卓通知进度条冻结

4
这是我正在使用的代码。 http://pastebin.com/3bMCKURu 问题在于随着文件大小的增加,通知栏拉下来的速度会变慢,最终会冻结!
2个回答

3

您的通知太频繁了,这就是为什么它会冻结。请将它们更新为更大的间隔时间。"好"是每秒或每2秒更新一次。


romhandler.sendMessage(new Message()); 这段代码每1.5秒被调用一次,之后handler会额外添加150毫秒的时间,总共需要1.65秒,这是一个很长的时间,或者说出现了错误?sleep放置不当了吗? - Jesus David Gulfo Agudelo
尝试使用日志来查看处理程序被调用的频率。唯一可能冻结您的应用程序的事情是在UI线程中运行广泛的处理任务,而这就是您的情况中的处理程序。 - DArkO
将时间增加到3秒,现在它运行了37%,仍然没有冻结,我需要等待并观察是否会冻结。 - Jesus David Gulfo Agudelo
正如我所说,在处理程序中添加一些日志,并在Logcat中查看您的处理程序是否被调用的次数超过您设置的次数。 - DArkO
我在AsyncTask的doInBackground()方法中使用System.currentTimeMillis()来减缓通知发送的节奏。这很丑陋,但它非常有效,并避免了向系统发送过多的通知事件。 请参见下面的解决方案。 - LM.Croisez

3
这个解决方案对我有用(虽然不太美观但有效):
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;
        }
...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接