我正在使用
启动Android服务startService(getApplicationContext(), MyService.class);
我在AndroidManifest中正确定义了我的服务。现在,我在Application create上面调用代码。
案例1:从Application onCreate()
调用上面的代码案例2:从应用程序中的Activity调用上面的代码
这是预期的行为吗?
我的Android Manifest Code按要求:
<service
android:exported="false"
android:enabled="true"
android:name=".MyService"
android:process=".MyService">
</service>
答案 0 :(得分:4)
由于您在android:process
元素中指定了<service>
属性,并且其值与应用程序包名称不同,因此该服务实际上是在与您的默认进程不同的进程中运行的应用。 (我不知道这是否是故意的,但你似乎也在流程名称中有拼写错误。)
如果您不打算在单独的进程中运行该服务(这种情况很少见,而且只有在您有充分理由并了解其含义时才应该执行此操作),您应该省略android:process
属性在<service>
元素中 - 这会导致它在与应用其余部分相同的过程中运行。
Android的一个鲜为人知且看似无证的行为是应用程序的每个进程都有自己的Application
实例。这解释了为什么启动服务会创建一个额外的Application
实例。
此外,这两个进程不仅拥有自己的Application实例,而且实际上还有自己的Application类,因为它们甚至不共享相同的类加载器。因此,即使它们的静态变量也可以有不同的值。