Ich habe die folgende Anwendungsklasse für meine App. Wenn die Anwendung gestartet wird, möchte ich einige Einstellungen aus den Einstellungen abrufen und einen Hintergrunddienst starten.Race-Bedingung zwischen Application onCreate und Ressourcen geladen?
public class MyApplication extends Application {
public void onCreate() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String key = getResources().getString(R.string.prefkey_updateinterval);
...
}
Diese Regel funktioniert gut, aber gelegentlich, wenn mein Programm von Eclipse "Run" starten bekomme ich diesen Fehler:
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)
Diese ID von meinem R.java ist:
public static final int prefkey_updateinterval=0x7f0a0004;
Da dies die meiste Zeit funktioniert, muss ich davon ausgehen, dass zwischen onCreate und den geladenen Ressourcen eine Art Race-Bedingung besteht.
Wenn das der Fall ist, wird empfohlen, Ressourcen in der Anwendung onCreate nicht zu lesen?
Wenn ja, gibt es einen besseren Ort, um einen Dienst zu initialisieren, wenn die Anwendung gestartet wird?
Sie können den 'Service' immer nur in der Hauptaktivität Ihrer App initialisieren ... dies vermeidet die Notwendigkeit der Unterklasse' Application'. –