首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否加载应用程序onCreate和资源之间的竞争条件?

是否加载应用程序onCreate和资源之间的竞争条件?
EN

Stack Overflow用户
提问于 2012-10-10 23:43:47
回答 2查看 836关注 0票数 8

我为我的应用程序提供了以下应用程序类。当应用程序启动时,我想从preferences中获取一些设置,并启动一个后台服务。

代码语言:javascript
复制
public class MyApplication extends Application {

    public void onCreate() {
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
            String key = getResources().getString(R.string.prefkey_updateinterval);
            ...
    }

这通常工作得很好,但偶尔从eclipse "Run“启动我的程序时,我会得到这个错误:

代码语言:javascript
复制
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:

代码语言:javascript
复制
public static final int prefkey_updateinterval=0x7f0a0004;

因为这在大多数情况下都工作得很好,所以我不得不假设在onCreate和加载的资源之间存在某种竞争条件?

如果是这样的话,是否建议不要在应用程序onCreate中读取资源?

如果是这样的话,有没有更好的地方在应用程序启动时初始化服务?

EN

回答 2

Stack Overflow用户

发布于 2012-10-10 23:51:52

由于这在大多数情况下都工作得很好,我不得不假设在onCreate和加载的资源之间存在某种竞争条件?

如果相同的APK文件--没有重新编译、没有重新安装等等--没有一致地生成错误,那么它可能是某种竞争条件,尽管这会让我感到惊讶。

如果相同的APK文件总是失败,那么这是一个更普通的问题,清理项目会将其清理干净。

在应用程序启动时,有没有更好的地方来初始化服务?

我的意思是,需要“在应用程序启动时初始化服务”的应用程序数量非常少,以至于我想不出一个即兴的方案,这将是一个好的计划。这并不是说你没有这样的场景,但在我的书中,这是一个严重的代码气味,没有任何解释。

票数 6
EN

Stack Overflow用户

发布于 2012-10-10 23:58:54

我注意到,在使用(并在R.java中生成)大量资源的情况下,在运行之前清除应用程序可以修复这些问题。因此,我假设这不是竞争条件--而是Eclipse或Android SDK没有刷新资源的问题。至于代码的位置--在我看来,它和其他选择一样好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12823300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档