我使用异步任务并行下载多个文件(超过 10 )(代码与Main.java不同.java文件)。
我产生了许多异步任务,每个任务将每2秒调用onProgress
在Async任务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”声明并初始化为public static。 (所以我可以在另一个.java文件中的异步任务中轻松调用它们)
public static Notification notification;
public static NotificationManager nm;
当我同时下载 5 文件时,它仍然可以正常工作(没有明显的延迟)。
但是,当我并行下载超过 10 文件时,通知栏会变得非常滞后
它甚至在我同时下载 20 文件并且出现错误时发生了崩溃“不幸的是系统ui已停止”,我的通知栏完全消失(必须重新启动手机)。
更新这样的多个通知的更好方法是什么,但没有延迟?
请注意,延迟不是由异步任务中的下载引起的。我已尝试下载而不在通知栏中显示通知,并且它没有任何延迟。 (Galaxy S3 Quad Cores Exynos)
答案 0 :(得分:0)
请注意,如果您将AsyncTasks称为:as.execute();
,则它们不会并行运行。为此,您需要:as.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR))
答案 1 :(得分:0)
为什么不制作一个包含所有下载信息的通知,例如总进度。
点击多次下载通知会显示新的Activity
,其中会显示有关各个下载的详细信息。
我个人认为用户不喜欢这么多通知,并且评估者看到它合并为一个。