自定义通知:java.lang.RuntimeException:错误的数组长度

我正在尝试在Android应用程序中使用自定义通知(使用Google的示例)(部分创build自定义通知布局 )。 由于我正在使用这个确切的代码,每隔几次就会触发一个RuntimeException

我的堆栈跟踪:

 FATAL EXCEPTION: main java.lang.RuntimeException: bad array lengths at android.os.Parcel.readIntArray(Parcel.java:677) at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:369) at android.app.NotificationManager.notify(NotificationManager.java:110) at android.app.NotificationManager.notify(NotificationManager.java:90) at com.****.service.UpdateFeedService.notifyUpdateProgress(UpdateFeedService.java:266) at com.****.service.task.PodcastUpdaterTask.onProgressUpdate(PodcastUpdaterTask.java:63) at com.****.service.task.PodcastUpdaterTask.onProgressUpdate(PodcastUpdaterTask.java:1) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:144) at android.app.ActivityThread.main(ActivityThread.java:4937) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) 

我的代码:

 private final Intent updateInProgressIntent = new Intent(this.context, PodcastListActivity.class); private RemoteViews updateInProgressContentView = null; private PendingIntent updateInProgressPendingIntent = null; private Notification updateInProgressNotification = null; ... @Override public void onCreate() { super.onCreate(); ... this.updateInProgressPendingIntent = PendingIntent.getActivity(this, UPDATE_INPROGRESS_NOTIFICATION_ID, this.updateInProgressIntent, PendingIntent.FLAG_UPDATE_CURRENT); this.updateInProgressContentView = new RemoteViews(getPackageName(), R.layout.custom_notification); ... } public void notifyUpdateProgress(final int index, final int size, final Podcast podcast) { this.updateInProgressContentView.setImageViewBitmap( R.id.image, ActivityHelper.getBitmap(context, podcast.getThumbnailAsset())); this.updateInProgressContentView.setTextViewText(R.id.title, "some msg"); this.updateInProgressContentView.setTextViewText(R.id.text, podcast.getName()); this.updateInProgressNotification.contentView = this.updateInProgressContentView; this.updateInProgressNotification.contentIntent = this.updateInProgressPendingIntent; this.notificationManager.notify(UPDATE_INPROGRESS_NOTIFICATION_ID, this.updateInProgressNotification); ... } 

如果我用一个标准的replace自定义通知(与setLatestEventInfo() )我没有问题。

Solutions Collecting From Web of "自定义通知:java.lang.RuntimeException:错误的数组长度"

如果您看到此问题,请调查您用于通知图片的位图大小。

如果它太大,你可能会看到这个错误,以及Android系统端的OutOfMemoryError

好的,所以我终于find了解决办法。 您不能像我一样重新使用相同的RemoteView对象! 我在onCreate()方法中创buildRemoteView,然后在notifyUpdateProgress()中设置它的属性。 如果我在使用它之前在notifyUpdateProgress()中创build对象,那么我不再有exception了。