API < 23個のデバイスで完全に動作するアプリケーションを作成しようとしていますが、API 23デバイスで動作します。
基本的に、ユーザーがオプションメニューで設定を変更すると、recreate()でアクティビティが再作成されます。今、メニューオプションでゆっくりとタップすると(オプションが表示されるようになるため)、すべて問題ありませんが、一時的にタップするとアプリケーションがクラッシュします。
私はそれが異常な挙動を止めていることを知っています。私は何がエラーを起こすのかを理解するのに苦労しました。私は再作成()の前にタイムアウトを設定しているので、オプションが "検証され"ても動作しませんでした。 私は他のAPIと以前に働いていたので、私はAPI 23の何らかのバグについて考えることができます。 API 23/MarshmallowのonOptionsItemSelected()内のrecreate()エラーを受け取ります
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)
任意のヘルプやアドバイス
は非常に高く評価されるだろう:@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);
}
とlogcat: はここに私のコードのスニペット(何も特別な)です。
更新:私は間違いなくAPI> 23にバグがあると思います。空白のアクティビティで新しいプロジェクトを作成し、ちょうどアプリはまだクラッシュonOptionsItemSelected()
if (id == R.id.action_settings) {
recreate();
return true;
}
の内側に追加した後。
だから私の回避策は次のとおりです。
Intent intent = getIntent();
finish();
startActivity(intent);
しかし、リロードは()(私は少し点滅を見ることができます)再作成ほどスムーズではありません。
"私はエラーメッセージがあります" - Javaスタックトレースまたは他のエラーメッセージを投稿してください。 – CommonsWare
私はまだログを見ることで問題はありませんが、recraete()はinvalidateOptionsMenu()に置き換えることができます – dex
私は既にinvalidateOptionsMenu()を試しましたが、ページを再作成/更新するトリックはしません。私はそれをメニューのオプションをリフレッシュするために使用し、その目的のためにうまくいきます。 – Vega