2011-11-02 17 views
16

Android uygulamasındaki özel bildirimleri, Google'ın örneğini kullanarak here (bölüm Creating a Custom Notification Layout) bölümünden kullanmaya çalışıyorum. Bu tam kodu kullanıyorum çünkü bir bildirim her birkaç kez bir RuntimeException aldım.Özel bildirim: java.lang.RuntimeException: hatalı dizi uzunlukları

Benim Yığın izleme:

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) 

Kodum:

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); 

     ... 
     }  

I (setLatestEventInfo() ile) standart biriyle Özel bir bildirim değiştirin ben sorunumuz yok.

cevap

5

Tamam, sonunda çözümü buldum. Aynı RemoteView nesnesini benim yaptığım gibi yeniden kullanamazsınız! onCreate() yönteminde RemoteView'ı yaratıyordum, sonra notifyUpdateProgress() içinde kendi özelliklerini ayarlıyordum. Nesneyi kullanmadan hemen önce notifyUpdateProgress() içinde oluşturursam artık istisna yapıyorum.

+1

Bazen bu çökmeyi yepyeni bir RemoteView ile bile aldım, bu yüzden bence @Brigham – tokudu

+0

@ Brigham'ın cevabının belirttiği gibi bitmapler ile ilgili. "RemoteView" inizin etrafındaki "Bitmap" nesnelerini sızdırıyor olabilirsiniz. –

18

Bu sorunu görüyorsanız, bildirim görüntüsü için kullandığınız Bitmap'in boyutunu araştırın.

Çok büyükse, Android sistem tarafında bu hatanın yanı sıra OutOfMemoryError olduğunu görebilirsiniz.

+0

m m düzende de ayarlanmış uygulama simgesinden başka hiçbir görüntü kullanmıyor – DjHacktorReborn

İlgili konular