3

で宣言することにより、同じユーザー ID と同じプロセスを共有する 2 つのアプリケーションがあるとします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">
        ...
        ...

各アプリケーションにサービスが定義されており、両方が同時に実行されている場合、同じプロセスで実行されているにもかかわらず、それぞれに 1 つの「メイン」スレッドが取得されますか? それとも、1 つの「メイン」スレッドも共有していますか?

どんな啓発も非常に高く評価されます。ありがとう!

4

1 に答える 1

2

マニフェストごとに複数のアプリケーションを持つことはできません。通常、2 つのアプリケーションが同じプロセスを共有することはできませんが、これは android:process 属性でオーバーライドできます (以下を参照)。

さらに、サービス内のコードは、UI スレッドであるアプリ内のアクティビティと同じスレッドで実行されます。

同じアプリケーションに複数のサービスがある場合、それらはアプリケーションと同じプロセスにあり、すべて同じスレッドにあります。

これを回避するには、アプリケーションのプロセス名を指定し、サービスのプロセス名も指定します。android:process 属性を参照してください。

もちろん、各プロセスには独自のスレッドがあるため、これによりサービスごとに個別のスレッドが提供されます。

ただし、サービスの使用目的によっては、複数の IntentService クラスが必要になる場合があります。それらはすべてアプリと同じプロセスで実行されますが、それぞれに UI スレッドとは異なる独自のスレッドがあります。

もちろん、同じ Service に対して複数のスレッドを手動でコーディングすることもできますが、これを正しく実装するのは困難です。

于 2012-06-08T16:49:31.463 に答える