【发布时间】:2013-09-22 18:56:54
【问题描述】:
我意识到这个问题已经被问过很多次了,但我仍然无法完全理解这个概念。在我的应用程序中,我使用静态实用程序类来保留常用方法(例如显示错误对话框)
这是我的静态类的样子:
public class GlobalMethods {
//To show error messages
public static final void showSimpleAlertDialog(final Activity activity, String message, final boolean shouldFinishActivity) {
if (!activity.isFinishing()) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity, AlertDialog.THEME_HOLO_DARK);
builder.setCancelable(true).setMessage("\n" + message + "\n").setNeutralButton(activity.getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
}).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
if (shouldFinishActivity)
activity.finish();
}
}).show();
}
}
//check for connectivity
public static final boolean isOnline(Context context) {
NetworkInfo networkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnectedOrConnecting());
}
//for the 'HOME' button on every activity
public static final void goToDashboard(Activity activity) {
goToActivity(ActivityDashboard.class, activity);
}
}
在我的主要活动中,我这样调用这个函数
GlobalMethods.showSimpleAlertDialog(this, R.string.error_msg_failed_load, true);
这是一个好方法吗?这会导致内存泄漏吗?如果是,请指导我使用实用程序类的最佳实践
【问题讨论】:
-
其实你现在的代码没有问题。确实,在传递
Activity上下文时要小心,但在这种情况下,没有破坏活动生命周期的静态/长期存在的引用,和/或任何可能阻止引用的长期运行的操作垃圾收集。 @agamov 给出的链接中的摘要基本上说明了一切。不过,在这种特殊情况下,无需使用WeakReference来混淆您的代码。
标签: android memory-leaks pass-by-reference android-context utility-method