Android:从静态块设置一次后,静态字段的值将丢失

时间:2011-11-02 10:33:09

标签: android static block

我正在开发一个Android项目。我有一个带有一些静态字段的类。我使用静态块从另一个类初始化这些字段。但是,当稍后在程序中访问静态字段时,字段中设置的值将丢失。

请参阅以下两个类:

public class Constants {
    static {
        String TAG = "Credentials";
        Log.d(TAG, "Inside static block");
        Logger.setCredentials(tempUserId, tempPasswd);
        Log.d(TAG, "Inside static block : Logger.userId : " + 
                Logger.userId + " : Logger.password : " + Logger.password);
        new Logger("Test");
        Log.d(TAG, "Inside static block : After creatinf object : Logger.userId : " + 
            Logger.userId + " : Logger.password : " + Logger.password);

    }
}

public class Logger {
    public static String userId;
    public static String password;

    public static void setCredentials(String userId, String password) {
        Logger.userId = userId;
        Logger.password = password;
        Log.d("Credentials","Inside setCredentials : Logger.userId : " + 
            Logger.userId + " : Logger.password : " + Logger.password);
    }

    public Logger(String tag) {
        super();
        Log.d("Credentials","Inside constructor : Logger.userid : " + 
            Logger.userId + " : Logger.password : " + Logger.password);
        if (Logger.userId == null || Logger.password == null) {
            throw new NullPointerException();
        } else {
        }
    }
}

节目输出:

内部静态块

内部setCredentials:Logger.userId:testuser:Logger.password:abc.123

内部静态块:Logger.userId:testuser:Logger.password:abc.123

内部构造函数:Logger.userid:testuser:Logger.password:abc.123

内部静态块:在creatinf对象之后:Logger.userId:testuser:Logger.password: abc.123

内部构造函数:Logger.userid:null:Logger.password:null

显示java.lang.NullPointerException

当作为Java应用程序运行时,代码可以正常工作。在android中运行时,字段值会丢失。请说明出了什么问题?

还有一件事,如果在代码中处理异常,则在异常处理后再次调用静态块。

1 个答案:

答案 0 :(得分:0)

现在可能不是你的问题,但请注意Android并不能让你对你的进程存在多长时间(以及你的静态变量)有很多控制权。 Android可以免费杀死您的进程(如果您的应用程序暂停)并稍后重新创建它。您有责任在需要和适当的情况下保存状态。