【问题标题】:updating too much notifications cause lag, how to improve it?更新太多通知会导致延迟,如何改善?
【发布时间】:2013-06-11 01:20:17
【问题描述】:

我正在使用异步任务并行下载多个文件(超过 10)(代码与 Main.java 位于不同的 .java 文件中)。
我生成了许多异步任务,每个任务大约每 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 中的“通知”和“nm”声明并初始化为公共静态。 (所以我可以在另一个 .java 文件中的异步任务中轻松调用它们)

public static Notification notification;
public static NotificationManager nm;

当我并行下载大约 5 个文件时,它仍然可以正常工作(没有明显的滞后)。
但是当我并行下载超过 10 个文件时,通知栏变得非常滞后。
当我同时下载 20 个文件并出现错误“不幸的是系统 ui 已停止”时,它甚至崩溃了,并且我的通知栏完全消失了(必须重新启动手机)。

像这样更新多个通知但没有延迟的更好方法是什么?

请注意,延迟不是由异步任务中的下载引起的。我试过下载,通知栏中没有显示通知,而且完全没有延迟。 (Galaxy S3 四核 Exynos)

【问题讨论】:

  • 好吧,您可以“不要”用您的下载内容填充整个通知栏,而是设置一个最大数量。例如,如果超过 5 次下载,只有一个通知显示整体进度以及有多少是活动的/已完成的,onClick 会将用户带到显示所有下载及其状态的活动/片段/某处?我认为没有人希望同时收到超过 5 或 10 个通知。
  • 是的,它也可能是一个很好的解决方案。但我更喜欢用更简单的解决方案来解决它。如果通知栏真的不可能不滞后多个通知,那么我会使用你的建议。谢谢!
  • @tcboy88 这个答案对我有用:Answer

标签: java android notifications progress-bar


【解决方案1】:

请注意,如果您将 AsyncTasks 称为:as.execute();,它们不会并行运行。为此,您需要:as.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR))

【讨论】:

  • 我所有的下载任务都使用 task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
  • 这是一个简单的答案,修复它设置最大通知或继续思考并给我们答案!!! :)
【解决方案2】:

为什么不只发出一条通知,其中包含有关所有下载的信息,例如总进度。

单击多次下载通知会显示一个新的Activity,其中显示有关各个下载的更多详细信息。

我个人认为用户不喜欢这么多通知,并且评分者看到它们合并为一个。

【讨论】:

  • 因为所有进度(百分比)都在不同的异步任务中。我需要一些机制来将所有这些组合成一个总体进度(可能使用全局变量或其他东西)。但是我更喜欢更简单的方法,不需要展示一个新的Activity。谢谢!
  • 我个人还是会尽量提供良好的用户体验,你也可以选择不显示任何进度,只告诉用户“17 次下载活跃”。我相信显示这么多通知可能会让用户非常恼火。但如果真的不可能,请尝试使用线程执行器。
猜你喜欢
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2010-11-05
  • 2021-10-22
  • 2017-04-28
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多