Android 在整个活动中重复使用字符串或Int?

Android 在整个活动中重复使用字符串或Int?,android,performance,android-activity,Android,Performance,Android Activity,我没有意识到我一直在使用一个int和一个string来考虑主要活动 现在我想了想,我有种感觉,他们会泄露我的记忆 代码: } 这是坏的和泄漏的内存吗 非常感谢它本身不会产生任何影响。垃圾收集会处理好的。 私有字段促进封装 除非需要将字段或方法公开给其他类,否则使用private是一种普遍接受的约定。从长远来看,养成这样的习惯会帮你省去很多痛苦 然而,公共字段或方法本身并没有任何错误。它对垃圾收集没有影响。为什么很多人使用String=“”;在方法中,而不是在私有字符串中;在活动开始时?如果垃圾收

我没有意识到我一直在使用一个int和一个string来考虑主要活动

现在我想了想,我有种感觉,他们会泄露我的记忆

代码:

}

这是坏的和泄漏的内存吗


非常感谢

它本身不会产生任何影响。垃圾收集会处理好的。 私有字段促进封装

除非需要将字段或方法公开给其他类,否则使用private是一种普遍接受的约定。从长远来看,养成这样的习惯会帮你省去很多痛苦


然而,公共字段或方法本身并没有任何错误。它对垃圾收集没有影响。

为什么很多人使用String=“”;在方法中,而不是在私有字符串中;在活动开始时?如果垃圾收集处理了它,为什么字符串的内容在任何时候都是可用的?它看起来好像从来没有被垃圾收集器扔掉过?ThanksIt取决于您希望该变量的作用域。如果在方法之外不需要它,那么在方法之外声明它是没有意义的。我认为你不太了解垃圾收集的工作原理。如果程序正在使用一个对象(如活动),那么它引用的任何对象也在使用中,因此不会被垃圾收集。不管你是否在用这个字符串做任何有意义的工作都是无关紧要的;如果使用中的对象可以访问它,那么它就不会被垃圾收集。@Karakuri,我很确定我对GC不太了解,这就是为什么我要求更好地理解它。如果该字符串是在方法中声明的,并且有一段时间没有使用它,那么该字符串将被垃圾收集器丢弃,对吗?私有字符串不会被垃圾收集,因为它们仍在浮动以供使用。很抱歉,我只是不明白为什么这些浮动的私有字符串不坏。所以基本上,我可以自由声明私有字符串&在MainActivity中反复使用它们,而不会出现任何问题?感谢您的注释Karakuri。一旦您离开某个作用域,就不再使用该作用域中声明的变量。考虑作用域的最佳方式是一对括号:
{}
。如果在它们之间声明一个字符串,一旦代码通过右括号,该字符串就不再使用,可以被收集。当然,作用域可以嵌套。如果您计划在该类中的多个位置使用私有类成员,则该私有类成员还不错,并且没有更小的范围可以封装这些用法。@Karakuri,非常感谢您做了很好的解释。我会把这些写在我的笔记本上。我喜欢安卓的开发,真的想做得更好。非常感谢你一直以来帮助我。
public class MainActivity extends Activity {

private Button deleteButton;
private String imagePath;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        deleteButton = (Button) findViewById(R.id.delete_button);
        //===== SHARED_PREFERENCES ==============================================================
        SharedPrefs = this.getSharedPreferences("SHARED_PREFS", Context.MODE_PRIVATE);
        prefs_editor = SharedPrefs.edit();

         try {
              imagePath = SharedPrefs.getString("ImagePath", "");
            }
        catch (Exception e) {  }    
      }

     .....

     .....

            deleteButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    File file = new File(imagePath);
                    .....

                }
            }); 

            mImageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    imageLoader.loadImage(imagePath, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            mImageView.setImageBitmap(loadedImage);                                 
                        }
                    });
                }

public void LoadNextImagePath() {
    File file = new File(LoadUserSavedPathString);
    if(file.isDirectory()) {
        listFile = new File(LoadUserSavedPathString).listFiles();                       
        imagePath = listFile[LastItemPosition-1].getAbsolutePath();
    }
}