0

嗨,我在这里做一个应用程序。我正在使用全局类变量。它运行良好,但如果我使用更多的 globalclass 变量,我有时会遇到内存异常。

我试过这个:

  public class SecondClass extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);



    TextView tv = (TextView)findViewById(R.id.tv);
    tv.setText("Global String : " + GlobalClass.myVal);
}
 }


  class GlobalClass extends Application {

   static String myVal;

  }

这是正确的还是不正确的?

4

4 回答 4

3

你可以这样使用

public class GlobalVar {

    public int getMyVar() {
        return myVar;
    }

    public void setMyVar(int myVar) {
        this.myVar = myVar;
    }

    private int myVar = 0;
    private static GlobalVar instance;

    static {
        instance = new GlobalVar();
    }

    private GlobalVar() {
    }

    public static GlobalVar getInstance() {
        return GlobalVar.instance;
    }

}

然后你可以打电话

GlobalVar.getInstance().setMyVar(int);
于 2012-10-29T10:15:40.110 回答
3

首先,您不需要静态变量在应用程序类中声明全局变量,

所以将您的代码更改为:

class GlobalClass extends Application {

   public String myVal;

  }

然后无论您需要在何处访问此数据,都可以通过以下方式获取 Application 对象:

GlobalClass global=(GlobalClass)context.getApplication();
global.myVal="anything";
于 2012-10-29T10:16:35.320 回答
1

您还可以明智地使用全局变量活动类。例如

 public class SecondClass extends Activity {
String S1,S2,S3;
EditText edt1,Edt2,Edt3;
Button btn1,btn2,btn3;
//like this wat Declare all variable you want to use in your Present Activity Class
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setContentView(R.layout.second);
edt1= (EditText)findViewById(R.id.tv);
}
}
于 2012-10-29T10:25:38.560 回答
0

看看这篇文章Singletons vs. Application Context in Android?

论坛中有很多关于 Singletons 与 Application 对象的讨论。我个人倾向于 Application 具有属性的对象。如果您不想在内存中保留大量对象,请使用 LruCache(兼容性包中有一个 pre v11 实现)来降低您的内存需求。

考虑到您使用 Singleton 将消耗与使用 Application 对象相同数量的内存,所有对象都将保留在内存中,直到您释放它们(删除对它们的任何引用并让 GC 从内存中清除它们)。

于 2012-10-29T10:29:55.873 回答