Android:如何在调用onCreate之前设置静态值

Android:如何在调用onCreate之前设置静态值,android,Android,我希望在创建活动之前或至少在活动开始之前设置“选项”。是否有办法通过AndroidManifest实现这一点?考虑这个例子,我们有一个全局配置类,用于在OnCuto中实例化一个对象(不是完全面向OO) 显然,在这种情况下,“可见”将是“假”。如果这是某种API库,我们希望为用户提供将“可见”设置为“真”的选项 更新1 目标是在预编译库中拥有全局类,并由使用该库的开发人员设置其值。我正在寻找开发人员在创建应用程序时实现这一点的最简单方法;我认为清单可能是最好的选择,但我不知道如何通过xml为“可见

我希望在创建活动之前或至少在活动开始之前设置“选项”。是否有办法通过AndroidManifest实现这一点?考虑这个例子,我们有一个全局配置类,用于在OnCuto中实例化一个对象(不是完全面向OO)

显然,在这种情况下,“可见”将是“假”。如果这是某种API库,我们希望为用户提供将“可见”设置为“真”的选项

更新1

目标是在预编译库中拥有全局类,并由使用该库的开发人员设置其值。我正在寻找开发人员在创建应用程序时实现这一点的最简单方法;我认为清单可能是最好的选择,但我不知道如何通过xml为“可见”注入值。下面使用首选项的答案很好,但仅涵盖用户的观点

更新2 IMHO在这里使用资源效果最好

<bool name="visible">true</bool>

对于简单对象,您可以这样创建它们:(基于您的代码示例)

对于更复杂的对象,可以使用如下方法初始化:

public static boolean visible;

static {
    visible = false;
}

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // here is where we want the most up-to-date value of visible
        MyObject obj = new MyObject(Global.visible);
    }
}

您可以将
android.app.Application
子类化,该类具有可重写的方法
onCreate
。您的子类必须在
中的
AndroidManifest.xml
中定义<在创建应用程序中的所有其他组件之前(在任何
活动或
服务之前)调用应用程序的code>onCreate

我认为使用SharedReferences可以满足您的需要,使用
全局.visible
作为默认值。然后,如果用户将其更改为
true
,它将使用该值

boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
  "MyVisiblePreference",
  Global.visible);
MyObject obj = new MyObject(makeVisible);

要允许首选项在无需重新编译或设置(通过“首选项”活动)的情况下可更新,可以从
参考资料
加载默认首选项:

<bool name="MyVisiblePreference">true</bool>

如果开发人员没有将首选项设置为
false
,它将默认为
true
(基于
资源
值)。

这是开发人员的一个选项,但需要他们重新编译/修改源代码。有趣的是,您是否有一个示例,说明如何通过xml将值注入到覆盖的类上?不使用编译的默认类
Global
,而是使用更新的答案,供开发人员更新(无需修改
MyActivity
中的引用,在我的情况下,使用资源文件是最好的解决方案,因此您的回答肯定会引导我朝这个方向前进。
public static boolean visible = false;

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // here is where we want the most up-to-date value of visible
        MyObject obj = new MyObject(Global.visible);
    }
}
public static boolean visible;

static {
    visible = false;
}

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // here is where we want the most up-to-date value of visible
        MyObject obj = new MyObject(Global.visible);
    }
}
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
  "MyVisiblePreference",
  Global.visible);
MyObject obj = new MyObject(makeVisible);
<bool name="MyVisiblePreference">true</bool>
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
   "MyVisiblePreference",
   getResources().getBoolean(R.bool.MyVisiblePreference));