我是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);
我不确定这是否会导致,因为从理论上讲,动画可以比活动中的活动更长。
感谢所有帮助,谢谢!