IntentService是从BroadcastReceiver开始创建Application类的实例吗?

时间:2012-03-27 19:18:59

标签: android broadcastreceiver instance intentservice

我正在编写一些代码,可以在设备/应用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中初始化了返回对象)

1 个答案:

答案 0 :(得分:4)

当您的IntentService启动时,如果您的应用程序已在运行,创建Application类的实例。如果您的应用程序处于活动状态,您将能够按原样访问已修改的应用程序特定对象。 但是如果您的应用程序被杀死然后br启动服务,则会创建整个应用程序的新实例。静态方法不会为您提供当时所需的值。在某处保留数据并且不依赖于应用程序生命周期是我的建议。