9

この質問が何度も出されていることは承知していますが、私はまだこの概念を完全に理解できていません。私のアプリケーションでは、静的ユーティリティ クラスを使用して一般的なメソッドを保持しています (エラー ダイアログの表示など)。

私の静的クラスは次のようになります。

    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);

これは良いアプローチですか?これによりメモリリークが発生しますか? はいの場合、ユーティリティ クラスの使用に関するベスト プラクティスを教えてください

4

1 に答える 1

6

いいえ、それは悪いアプローチです。メソッドに渡しWeakReference<Activity>、次のようなメソッドを実装することをお勧めします。

public static final void showSimpleAlertDialog(final WeakReference<Activity> mReference, String  message, final boolean shouldFinishActivity) {
    Activity activity = mReference.get();
    if (activity != null) {
        //your code goes here
    }

さらに読む: http://android-developers.blogspot.ae/2009/01/avoiding-memory-leaks.html

于 2013-09-18T06:28:52.770 に答える