java – 在通知中使用巨大的内存
发布时间:2020-08-01 12:13:27 所属栏目:Java 来源:互联网
导读:我正在开发一个服务的应用程序,显示通知区域中的定时器的进度(带有进度条和文本).我已经提取了一个更简单的例子,同样的问题. 服务代码: public class TNService extends Service { private NotificationManager nm; private Notification notification; priv
|
我正在开发一个服务的应用程序,显示通知区域中的定时器的进度(带有进度条和文本).我已经提取了一个更简单的例子,同样的问题. 服务代码: public class TNService extends Service {
private NotificationManager nm;
private Notification notification;
private RemoteViews remoteView;
@Override
public void onCreate () {
nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
notification = new Notification(android.R.drawable.stat_sys_download,"My notification",System.currentTimeMillis());
remoteView = new RemoteViews(this.getPackageName(),R.layout.notification);
remoteView.setImageViewResource(R.id.icon,android.R.drawable.stat_sys_download);
remoteView.setTextViewText(R.id.text,"");
remoteView.setProgressBar(R.id.progress,100,false);
notification.flags = Notification.FLAG_NO_CLEAR;
notification.contentView = remoteView;
notification.contentIntent = PendingIntent.getActivity(this,new Intent(this,TNActivity.class),PendingIntent.FLAG_UPDATE_CURRENT);
Timer timer = new Timer ();
timer.schedule(new TNTask(this),200);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public void updateNotification(int progress) {
remoteView.setProgressBar(R.id.progress,1000,progress,false);
remoteView.setTextViewText(R.id.text,"Progress: " + progress);
nm.notify(0,notification);
}
}
TimerTask的代码: public class TNTask extends TimerTask {
private TNService service;
private int progress;
public TNTask(TNService s) {
this.service = s;
this.progress = 0;
}
@Override
public void run() {
progress = (progress + 1) % 1000;
this.service.updateNotification (progress);
}
}
问题是巨大的内存使用量.这是logcat输出: D/dalvikvm(11985): GC_EXPLICIT freed 1258 objects / 84016 bytes in 1157ms D/dalvikvm( 85): GC_FOR_MALLOC freed 52216 objects / 1900968 bytes in 130ms D/dalvikvm( 85): GC_FOR_MALLOC freed 49465 objects / 1805248 bytes in 125ms D/dalvikvm( 85): GC_FOR_MALLOC freed 53106 objects / 1909992 bytes in 134ms D/dalvikvm(12008): GC_EXPLICIT freed 1604 objects / 100944 bytes in 90ms D/dalvikvm( 85): GC_FOR_MALLOC freed 53011 objects / 1937160 bytes in 135ms D/dalvikvm( 85): GC_FOR_MALLOC freed 49806 objects / 1817992 bytes in 143ms D/dalvikvm( 85): GC_FOR_MALLOC freed 49016 objects / 1769536 bytes in 135ms D/dalvikvm( 85): GC_FOR_MALLOC freed 53509 objects / 1941064 bytes in 145ms D/dalvikvm( 85): GC_FOR_MALLOC freed 49895 objects / 1842312 bytes in 146ms D/dalvikvm( 85): GC_FOR_MALLOC freed 48728 objects / 1774496 bytes in 150ms D/dalvikvm( 85): GC_FOR_MALLOC freed 47557 objects / 1701976 bytes in 146ms D/dalvikvm( 85): GC_FOR_MALLOC freed 53540 objects / 1903808 bytes in 156ms D/dalvikvm( 85): GC_FOR_MALLOC freed 48997 objects / 1784048 bytes in 158ms D/dalvikvm( 85): GC_FOR_MALLOC freed 48326 objects / 1776864 bytes in 158ms D/dalvikvm( 85): GC_FOR_MALLOC freed 47566 objects / 1742488 bytes in 169ms D/dalvikvm( 85): GC_FOR_MALLOC freed 47606 objects / 1703416 bytes in 170ms D/dalvikvm( 162): GC_EXPLICIT freed 11238 objects / 641368 bytes in 1064ms 我认为这是太多的内存,一段时间后,手机挂起了这个输出: D/dalvikvm( 85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 241ms I/dalvikvm-heap( 85): Clamp target GC heap from 24.008MB to 24.000MB I/dalvikvm-heap( 85): Grow heap (frag case) to 24.000MB for 52-byte allocation I/dalvikvm-heap( 85): Clamp target GC heap from 26.008MB to 24.000MB D/dalvikvm( 85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 241ms I/dalvikvm-heap( 85): Clamp target GC heap from 24.008MB to 24.000MB I/dalvikvm-heap( 85): Grow heap (frag case) to 24.000MB for 24-byte allocation I/dalvikvm-heap( 85): Clamp target GC heap from 26.008MB to 24.000MB D/dalvikvm( 85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 247ms I/dalvikvm-heap( 85): Clamp target GC heap from 24.009MB to 24.000MB I/dalvikvm-heap( 85): Grow heap (frag case) to 24.000MB for 28-byte allocation I/dalvikvm-heap( 85): Clamp target GC heap from 26.009MB to 24.000MB D/dalvikvm( 85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 247ms I/dalvikvm-heap( 85): Clamp target GC heap from 24.009MB to 24.000MB 任何人都知道如何使用这么多的记忆? 谢谢! 解决方法我偶然发现同样的问题…似乎如果我不在服务中缓存RemoteView和Notification,但是在“更新”例程中重新创建它们,这个问题消失了.是的,我知道这不是很有效率,但是由于内存不足,至少手机在10-15分钟后才会重启.(编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
