gpt4 book ai didi

android - 有人可以解释 RemoteViews GC 行为吗?

转载 作者:搜寻专家 更新时间:2023-11-01 08:15:46 25 4
gpt4 key购买 nike

我有一个定期向通知报告进度的下载任务。有一段时间我每次都使用一个 RemoveView 私有(private)成员进行更新。

例如:

private RemoteViews mRemoteView;
protected void onCreate(){
mRemoteView = new RemoteViews( getPackageName(), R.layout.custom_layout )
contentView.setImageViewResource(R.id.notification_icon, R.drawable.downloads);
contentView.setTextViewText(R.id.notification_text, "Downloading A File " + (int)( (double)progress/(double)max * 100 ) + "%");
contentView.setProgressBar(R.id.mProgress, max, progress, false);

notification.contentView = contentView;
mNotificationManager.notify(HELLO_ID, notification);
}

protected void onProgressUpdate(Integer... prog) {
contentView.setProgressBar(R.id.mProgress, max, progress, false);
mNotificationManager.notify(HELLO_ID, notification);
}

但是,我发现 GC 不断清理空间并使该应用程序长时间缓慢运行。然后我尝试在每次更新时创建一个新的 RemoteViews,这很有效。我想知道这是为什么。我找到了一个链接 here这很有帮助,但我正在寻找更多信息。

这是有效的代码:

protected void onProgressUpdate(Integer... prog) {
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.notification_icon, R.drawable.downloads);
contentView.setTextViewText(R.id.notification_text, "Downloading A File " + (int)( (double)progress/(double)max * 100 ) + "%");
contentView.setProgressBar(R.id.mProgress, max, progress, false);

notification.contentView = contentView;
mNotificationManager.notify(HELLO_ID, notification);
}

最佳答案

您提供的链接对此进行了解释:

RemoteViews 用于在远程进程中创建 View 。实际上它不是一个 View ,而只是一组排队的命令。然后这个队列被序列化,发送到远程进程,反序列化,然后执行这组 Action 。结果是在远程进程中完全构建 View 。

正如链接所解释的那样:每次您在 RemoteViews 上调用方法时,都会将一个操作添加到它的队列中。不幸的是,没有办法清除队列,所以它一直在增长,直到出现 OOM 异常。

现在,队列在内部由数组支持(所有集合也是如此)。当队列填满它的内部数组时,它需要创建一个新的更大的数组并复制所有旧数据。 GC 然后清除旧数组。由于 RemoteViews 内部队列不断增长,新数组被创建,GC 不断清除旧数组。

关于android - 有人可以解释 RemoteViews GC 行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com