次のメモリリークの例に出くわしました
package com.justinschultz.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
public class LeakedDialogActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage("This dialog leaks!").setTitle("Leaky Dialog").setCancelable(false).setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {}
});
AlertDialog alert = builder.create();
alert.show();
}
}
回転で漏れる理由がわかりません。ダイアログがまだ画面に表示されている間に新しいアクティビティが作成されることを理解しました (古いアクティビティへの参照を含む)。ダイアログを閉じて、もう一度回転するとします。最も古いアクティビティへの参照を削除して、メモリを再利用できるようにすべきではありませんか?