安卓全局变量

327

我该如何创建全局变量,使其在应用程序的生命周期内保持值不变,而不管运行哪个活动。


为什么我们应该使用set和get(Jeff Gilfelt的答案)?!为什么我们不能直接将值设置到变量中,例如:public volatile static String x; 要设置值:GeneralClass.x = value; - Dr.jacky
14个回答

1

技术上讲,这并没有回答问题,但我建议使用Room数据库而不是任何全局变量。 https://developer.android.com/topic/libraries/architecture/room.html 即使你只需要存储一个全局变量,而且这并不是什么大事,但使用Room数据库是保持活动生命周期中的值最优雅、本地化和得到最好支持的方式。 它将有助于防止许多问题,特别是数据完整性。 我知道数据库和全局变量是不同的,但为了代码维护、应用程序稳定性和数据完整性,请使用Room。


0
如果可能的话,你应该在.so文件中声明那些需要保持存活状态、尚未被垃圾回收器或操作系统卸载的变量。为此,你必须使用C/C++编写代码并将其编译为.so库文件,然后在MainActivity中加载它。

1
本地代码是在RAM中存储数据的一种痛苦方式,其效果并不比Java的“静态”变量更好。 - Jerry101
我不明白这种方法的意义。你能详细说明什么情况下使用它是个好主意吗? - miva2

-1
import android.app.Application;

public class Globals extends Application
{
    private static Globals instance = null;
    private static int RecentCompaignID;
    private static int EmailClick;
    private static String LoginPassword;
    static String loginMemberID;
    private static String CompaignName = "";
    private static int listget=0;
    //MailingDetails
    private static String FromEmailadd="";
    private static String FromName="";
    private static String ReplyEmailAdd="";
    private static String CompaignSubject="";
    private static int TempId=0;
    private static int ListIds=0;

    private static String HTMLContent="";
    @Override
    public void onCreate() 
    {
        super.onCreate();
        instance = this;
    }

    public static Globals getInstance()
    {
        return instance;
    }

    public void setRecentCompaignID(int objRecentCompaignID)
    {
        RecentCompaignID = objRecentCompaignID;
    }

    public int getRecentCompaignID() 
    {
        return RecentCompaignID;
    }

    public void setLoginMemberID(String objloginMemberID) 
    {
        loginMemberID = objloginMemberID;
    }

    public String getLoginMemberID() 
    {
        return loginMemberID;
    }

    public void setLoginMemberPassword(String objLoginPassword)
    {
        LoginPassword = objLoginPassword;
    }

    public String getLoginMemberPassword()
    {
        return LoginPassword;
    }

    public void setEmailclick(int id)
    {
        EmailClick = id;
    }

    public int getEmailClick() 
    {
        return EmailClick;
    }
    public void setCompaignName(String objCompaignName)
    {
        CompaignName=objCompaignName;
    }
    public String getCompaignName()
    {
        return CompaignName;
    }
    public void setlistgetvalue(int objlistget)
    {
        listget=objlistget;
    }
    public int getlistvalue()
    {
        return listget;
    }
    public void setCompaignSubject(String objCompaignSubject)
    {
         CompaignSubject=objCompaignSubject;
    }
    public String getCompaignSubject()
    {
        return CompaignSubject;
    }
    public void setHTMLContent(String objHTMLContent)
    {
        HTMLContent=objHTMLContent;
    }
    public String getHTMLContent()
    {
        return HTMLContent;
    }
    public void setListIds(int objListIds)
    {
        ListIds=objListIds;
    }
    public int getListIds()
    {
        return ListIds;
    }
    public void setReplyEmailAdd(String objReplyEmailAdd)
    {
        ReplyEmailAdd=objReplyEmailAdd;
    }
    public String getReplyEmailAdd()
    {
        return ReplyEmailAdd;
    }
    public void setFromName(String objFromName)
    {
        FromName=objFromName;
    }
    public String getFromName()
    {
        return FromName;
    }
    public void setFromEmailadd(String objFromEmailadd)
    {
        FromEmailadd=objFromEmailadd;
    }
    public String getFromEmailadd()
    {
        return FromEmailadd;
    }
}

-6

太简单了!!!

如果你想要将某些变量作为全局变量来访问,你可以将它们声明为静态变量。现在,你可以通过使用

classname.variablename;

public class MyProperties {
private static MyProperties mInstance= null;

static int someValueIWantToKeep;

protected MyProperties(){}

public static synchronized MyProperties getInstance(){
    if(null == mInstance){
        mInstance = new MyProperties();
    }
    return mInstance;
}

}

MyProperites.someValueIWantToKeep;

就是这样!;)


不确定为什么它被踩得这么多;与其他一些网上投票的答案进行比较,我看到这个(如果我没记错的话)正确地在静态的getInstance()上使用了synchronized,而其他答案则没有。相应地进行了投票。 - user2297550
因为它是从上面的答案复制过来的。 - Albert Khang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接