在Android中启动服务调用应用程序onCreate

时间:2015-05-19 01:05:16

标签: android android-intent android-service

我正在使用

启动Android服务
startService(getApplicationContext(), MyService.class);

我在AndroidManifest中正确定义了我的服务。现在,我在Application create上面调用代码。

案例1:从Application onCreate()

调用上面的代码
  • 我看到Application.onCreate()被调用了两次。一个是所需的App create,另一个是在调用startService时发生的。

案例2:从应用程序中的Activity调用上面的代码

  • 与案例1相同的行为。

这是预期的行为吗?

我的Android Manifest Code按要求:

    <service
            android:exported="false"
            android:enabled="true"
            android:name=".MyService"
            android:process=".MyService">
    </service>

1 个答案:

答案 0 :(得分:4)

由于您在android:process元素中指定了<service>属性,并且其值与应用程序包名称不同,因此该服务实际上是在与您的默认进程不同的进程中运行的应用。 (我不知道这是否是故意的,但你似乎也在流程名称中有拼写错误。)

如果您不打算在单独的进程中运行该服务(这种情况很少见,而且只有在您有充分理由并了解其含义时才应该执行此操作),您应该省略android:process属性在<service>元素中 - 这会导致它在与应用其余部分相同的过程中运行。

Android的一个鲜为人知且看似无证的行为是应用程序的每个进程都有自己的Application实例。这解释了为什么启动服务会创建一个额外的Application实例。

此外,这两个进程不仅拥有自己的Application实例,而且实际上还有自己的Application类,因为它们甚至不共享相同的类加载器。因此,即使它们的静态变量也可以有不同的值。