2012-06-08 4 views
3

의 난에 선언함으로써, 동일한 사용자 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"> 
     ... 
     ... 

동시에 동일한 프로세스에서 실행 되더라도 각각에 대해 하나의 "기본"스레드가 생깁니 까? 아니면 하나의 "메인"스레드를 공유합니까?

모든 enlightment 매우 감사하겠습니다. 감사!

답변

2

매니페스트 당 하나 이상의 응용 프로그램을 사용할 수 없습니다. 두 응용 프로그램은 일반적으로 동일한 프로세스를 공유 할 수 없지만 android : process 속성을 사용하여이 프로세스를 재정의 할 수 있습니다 (아래 참조).

또한 서비스의 코드는 UI 스레드 인 앱의 활동과 동일한 스레드에서 실행됩니다.

동일한 애플리케이션에 여러 서비스가있는 경우 애플리케이션과 동일한 프로세스에 있으며 모두 동일한 스레드에 있습니다.

이 문제를 해결하려면 응용 프로그램의 프로세스 이름을 지정하고 서비스의 프로세스 이름을 지정할 수 있습니다. android : process 속성을 참조하십시오.

이것은 각 프로세스가 자체 스레드를 가지고 있기 때문에 각 서비스마다 별도의 스레드를 제공합니다.

그러나 서비스를 사용하는 대상에 따라 여러 개의 IntentService 클래스가있는 것이 좋습니다. 그들은 모두 동일한 프로세스로에서 실행되지만, 각각 자신의 스레드 인이 UI 스레드와 다릅니다.

물론 동일한 서비스에 대해 여러 스레드를 직접 코딩 할 수도 있지만 올바르게 구현하는 것이 더 어렵습니다.

+0

안녕하세요 Joe, 유용한 정보를 제공해 주셔서 감사합니다. 하지만 내가 말한 것은 동일한 사용자 ID와 프로세스를 공유하는 두 개의 별도 AndroidManifest.xml을 가진 두 개의 애플리케이션이 있다는 것입니다. 이 작업을 수행중인 프로젝트에서 하드웨어의 메모리 제한으로 인해 메모리 사용량을 절약 할 수 있습니다. 어떤 생각? –

관련 문제