2015-10-20 17 views
5

'da onOptionsItemSelected() içindeki recreate() içinde bir hata alıyorum Uygulamamı API < 23 cihazında mükemmel şekilde çalıştırmaya çalışıyorum, bir API 23 cihazında çalışıyorum.
Temel olarak, kullanıcı seçenekler menüsünden bir ayar değiştirdiğinde, etkinlik recreate() ile yeniden oluşturulur. Şimdi, menü seçeneğinde yavaşça dokunduğumda (vurgulanan seçeneği görmek için zamanım var), her şey yolunda, ancak kısaca dokunduğumda, Uygulama çöküyor.
Bunun bir tuhaf davranış olduğunu biliyorum ve hatayı neyin tetiklediğini anlamak için zor zamanlar geçirdim. Recreate() 'den önce bir zaman ayırdım, bu yüzden seçenek "onaylandı", ancak bu işe yaramadı. Yalnızca API 23'te bir tür hatayı düşünebilirim çünkü daha önce diğer API'lerle çalışmış. API 23/Marshmallow

10-20 23:12:10.062 3217-3245/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab3d1b80 
10-20 23:12:11.050 3217-3245/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4013030 
10-20 23:12:11.075 3217-3245/? E/Surface: queueBuffer: error queuing buffer to SurfaceTexture, -19 
10-20 23:12:11.075 3217-3245/? E/EGL_emulation: tid 3245: swapBuffers(324): error 0x3003 (EGL_BAD_ALLOC) 
10-20 23:12:11.075 3217-3245/? A/OpenGLRenderer: Encountered EGL error 12291 EGL_BAD_ALLOC during rendering 
10-20 23:12:11.075 3217-3245/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3245 (RenderThread) 

Herhangi bir yardım veya tavsiye

çok mutluluk duyacağız:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_item_1: 
      //... some code goes here 
      recreate(); 
      return true; 
      // some other options .. 
    } 
    return super.onOptionsItemSelected(item); 
} 

ve logcat: İşte benim kod snippet'idir (özel bir şey) 'dir.

UPDATE: Kesinlikle API> 23'te bir hata olduğunu düşünüyorum.() Boş bir aktivite ile yeni bir proje oluşturma ve sadece onOptionsItemSelected içine ekledikten sonra

if (id == R.id.action_settings) { 
    recreate(); 
    return true; 
} 

uygulaması hala çöküyor.

Intent intent = getIntent(); 
    finish(); 
    startActivity(intent); 

Ama yeniden() (Biraz yanıp görebilir) yeniden yaratmak ile olduğu kadar pürüzsüz değildir:

Yani benim geçici çözüm olduğunu.

+1

"Bir hata mesajım var" - lütfen Java yığın izini veya başka bir hata mesajını gönderin. – CommonsWare

+0

Hala günlükleri görerek sorun nedir ama recraete() invalidateOptionsMenu() – dex

+0

ile değiştirilmiş olabilir zaten invalidateOptionsMenu() denedim ama bu sayfa yeniden oluşturma/yenileme hile yapmaz. Yenileme menü seçenekleri için kullanıyorum ve bu amaçla iyi çalışıyor. – Vega

cevap