我是Android开发的新手,我一直在寻找确保我的应用程序不会泄漏内存的方法 . 我在网上读过,使用内部类会导致内存泄漏,特别是当它们可能比它们的Activity活动时更长 . 以下是我使用的一些内部类 . 其中哪些(如果有的话)可能会导致内存泄漏?

public class TitleScreenActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_title_screen);
    final MyHandler mHandler = new MyHandler(this);
    final Intent intent = new Intent(mHandler.mActivity.get(), IntroActivity.class);
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(intent);
            mHandler.mActivity.get().finish();
        }
    }, 2000);
}

private static class MyHandler extends Handler {
    public final WeakReference<TitleScreenActivity> mActivity;

    public MyHandler(TitleScreenActivity activity) {
        mActivity = new WeakReference<>(activity);
    }
}
}

我基于this article中找到的代码来构建此代码 . 但是,我不认为我可以使我的Runnable静态,就像他们在文章中所做的那样 . 即使我在runnable中完成了Activity,这段代码是否会导致内存泄漏?

另一个例子:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.no_tiles);
            builder.setPositiveButton(R.string.store, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // start new Activity
                }
            });
            builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // Do nothing, just close dialog
                }
            });
            AlertDialog dialog = builder.create();
            dialog.show();

我很难相信这可能会导致泄漏,因为它不包含对Activity,View等的明确引用,并且它(据我所知)当用户单击按钮时对话框被破坏,所以听众也会被摧毁 . 但是,我想确定一下 .

最后的例子:

TranslateAnimation translate;
        translate = new TranslateAnimation(0, 0, 0, 100);
        translate.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // modify a few variables
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }
        });
        translate.setDuration(200);
        findViewById(R.id.game_board).startAnimation(translate);

我不确定这是否会导致,因为从理论上讲,动画可以比活动中的活动更长 .

感谢所有帮助,谢谢!