假设我有两个应用程序共享相同的用户ID和相同的进程,通过在AndroidManifest.xml
中声明:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.appname1"
android:sharedUserId="com.myapp.sharedUserId">
<application android:process="com.myapp.sharedProcess">
...
...
和
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.appname2"
android:sharedUserId="com.myapp.sharedUserId">
<application android:process="com.myapp.sharedProcess">
...
...
如果每个应用程序都定义了一个服务并且两个服务器同时运行,尽管它们在同一个进程下运行,它们会为每个应用程序获得一个“主”线程吗?或者他们也分享一个“主”线程?
任何启发都将非常感激。谢谢!
答案 0 :(得分:2)
每个清单不能有多个应用程序。 两个应用程序通常不能共享相同的进程,但您可以使用android:process属性覆盖它(见下文)。
此外,服务中的代码与应用程序中的活动(即UI线程)在同一个线程中运行。
如果您在同一个应用程序中有多个服务,则它们与应用程序处于相同的进程中,所有这些服务都位于同一个线程中。
要解决此问题,您可以为应用程序指定进程名称,还可以指定服务的进程名称。请参阅android:process属性。
这将为每个服务提供一个单独的线程,因为每个进程当然都有自己的线程。
但是,根据您使用的服务,您可能更喜欢拥有多个IntentService类。它们都在与您的应用程序相同的进程中运行,但它们各自都有自己的线程,这与UI线程不同。
当然,您也可以为同一服务手动编写多个线程,但这很难正确实现。