如何在android中使用全局类变量

如何在android中使用全局类变量,android,android-emulator,Android,Android Emulator,嗨,我在这里做一个应用程序。我正在使用全局类变量。它工作得很好,但是如果我使用更多的globalclass变量,有时会出现内存异常 我试过这个: public class SecondClass extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sec

嗨,我在这里做一个应用程序。我正在使用全局类变量。它工作得很好,但是如果我使用更多的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;

  }
这是否正确?

您可以这样使用

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

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

因此,请将代码更改为:

class GlobalClass extends Application {

   public String myVal;

  }
然后,无论何时需要访问此数据,都可以通过以下方式获取应用程序对象:

GlobalClass global=(GlobalClass)context.getApplication();
global.myVal="anything";

还可以按类使用全局变量“活动”。例如

 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);
}
}
看看这篇文章

论坛中有很多关于单例与应用程序对象的讨论。 我个人倾向于使用具有属性的应用程序对象。如果您不想在内存中保留很多对象,请使用LruCache(兼容包中有v11之前的实现)来降低内存需求


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

扩展活动是一个坏主意:Activity类允许您显示某些内容;具有与此任务关联的完整生命周期。Application类广泛用于存储全局应用程序变量,如@jeet is do。但它有一个陷阱:应用程序对象可能在应用程序的生命周期中被销毁(主要是在系统需要内存的情况下),因此,不要假设应用程序类将始终安全地保留所有变量,否则,在情况并非如此时,您将遇到奇怪的错误。它工作正常。现在,我的应用程序outofmemory异常也将出现times@Teovald我应该用什么?SharedReference?SharedReference对于在会话之间存储简单对象非常有用。例如,如果您希望在用户首次使用应用程序时显示教程。