我的应用程序有以下应用程序类。当应用程序启动时,我想从首选项中获取一些设置并启动后台服务。
public class MyApplication extends Application {
public void onCreate() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String key = getResources().getString(R.string.prefkey_updateinterval);
...
}
这通常工作正常,但偶尔从 eclipse“运行”启动我的程序时,我会收到此错误:
10-10 08:25:47.016: E/AndroidRuntime(26402): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f0a0004
10-10 08:25:47.016: E/AndroidRuntime(26402): at android.content.res.Resources.getText(Resources.java:216)
10-10 08:25:47.016: E/AndroidRuntime(26402): at android.content.res.Resources.getString(Resources.java:269)
10-10 08:25:47.016: E/AndroidRuntime(26402): at com.karwosts.MyApp.PortfolioStore.onCreate(PortfolioStore.java:40)
10-10 08:25:47.016: E/AndroidRuntime(26402): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
10-10 08:25:47.016: E/AndroidRuntime(26402): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3395)
这个 id 来自我的 R.java:
public static final int prefkey_updateinterval=0x7f0a0004;
由于这在大多数情况下都可以正常工作,因此我必须假设 onCreate 和正在加载的资源之间存在某种竞争条件?
如果是这样,是否建议不要在Application onCreate中读取资源?
如果是这样,是否有更好的地方在应用程序启动时初始化服务?