我正在编写一些代码,可以在设备/应用C2DM注册令牌发生变化时将某些设备持久数据迁移到网络服务器。
这最终是由广播接收者(特别是因接收Google C2DM注册令牌而被称为接收者)开始的。
@Override
public void onRegistered(Context context, String registrationId) throws IOException {
Log.d(TAG, "registrationId: " + registrationId);
Intent selectIntent = new Intent(this, AlertMigrationService.class);
this.startService(selectIntent);
}
(注意:我的应用程序使用扩展普通Application类的自定义应用程序类。)
我认为技术上可以在我的应用程序处于后台(或不运行)时调用此接收器 - 那么当我的意图服务启动时会发生什么?它是否整理了我的整个应用程序并创建了我的Application类的实例?
从IntentService内部调用我的Application类上的静态方法是否安全(或者甚至是个好主意)? (这些静态方法在Application.onCreate中初始化了返回对象)
答案 0 :(得分:4)
当您的IntentService启动时,如果您的应用程序不已在运行,将创建Application类的实例。如果您的应用程序处于活动状态,您将能够按原样访问已修改的应用程序特定对象。 但是如果您的应用程序被杀死然后br启动服务,则会创建整个应用程序的新实例。静态方法不会为您提供当时所需的值。在某处保留数据并且不依赖于应用程序生命周期是我的建议。