更新过多的通知会导致延迟,如何改善?

3

我正在使用异步任务(代码在不同的.java文件中)并行下载多个文件(超过10个)。
我会生成许多异步任务,每个任务大约每2秒钟调用一次onProgress方法。
在异步任务的onProgress方法中,它将更新通知栏中的文本和进度条。

Main.notification.contentView.setProgressBar(R.id.status_progress, 100, percentCompleted, false); // percentCompleted is calculated
Main.notification.contentView.setTextViewText(R.id.status_text, title);
Main.nm.notify(value, Main.notification);

请注意,我在Main.java中将"notification"和"nm"声明并初始化为公共静态变量。(这样我就可以轻松地在另一个.java文件中的异步任务中调用它们)
public static Notification notification;
public static NotificationManager nm;

当我同时下载约5个文件时,仍然可以正常工作(没有明显的延迟)。但是当我同时下载超过10个文件时,通知栏变得非常缓慢。当我同时下载20个文件时,它甚至会崩溃,并显示错误“很遗憾,系统 UI 已停止”,我的通知栏完全消失了(必须重新启动手机)。
有没有更好的更新多个通知的方法,但又不会出现延迟呢?
请注意,延迟不是由异步任务中的下载引起的。我尝试过在通知栏中不显示通知进行下载,结果完全没有延迟。(Galaxy S3 四核 Exynos)

enter image description here


你可以设置一个最大数量,而不是填满整个通知栏。例如,如果超过5个下载,则只显示一个总体进度和活动/完成的数量的通知,单击将用户带到显示所有下载及其状态的活动/片段/其他内容中。我认为没有人会想同时拥有超过5或10个通知。 - damian
是的,这也可能是一个好的解决方法。但我更喜欢用更简单的解决方案来解决它。如果通知栏在有多个通知时无法避免滞后,那么我会采纳您的建议。谢谢! - tcboy88
@tcboy88,这里的答案对我有用:答案 - Tamim Attafi
2个回答

0
请注意,如果您像这样调用AsyncTasks:as.execute();,它们不会并行运行。为此,您需要使用:as.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR))

我的所有下载任务都是使用task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)运行的。 - tcboy88
那是简单的答案,设置通知的最大值或者继续思考并给我们答案!!! :) - Neron T

0
为什么不只创建一个通知,包含所有下载的信息,比如总进度。
点击多个下载通知会显示一个新的Activity,展示每个下载的更详细信息。
我个人认为用户不喜欢太多通知,更愿意将其合并成一个。

因为所有的进度百分比都在不同的异步任务中,我需要一些机制将它们合并成总进度(可能使用全局变量或其他方式)。但我更喜欢一种更简单的方法,无需显示新的活动。谢谢! - tcboy88
我个人仍然会尽力提供良好的用户体验,你也可以选择不显示任何进度,并只告诉用户“有17个下载正在进行”。我相信过多的通知可能会让用户感到非常烦恼。但如果真的不可能,尝试使用线程执行器。 - Rolf ツ

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