2011-08-21 58 views
1

目前我有一個空白服務,最終將用於確定是否已購買許可證,此服務位於外部應用程序中,其唯一工作是檢查並驗證許可證(外部應用程序:com.example.myapp.licence,主要應用:com.example.myapp)意向運行外部後臺服務

com.example.myapp.licence> LicenceService.java:

public class LicenceService extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 

    } 

    @Override 
    public void onStart(Intent intent, int startid) { 

    } 
} 

com.example.myapp.licence > AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.myapp.licence" 
     android:sharedUserId="com.example.myapp" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="4" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".My3DroidPaidLicenceActivity" 
        android:label="@string/app_name"> 
     </activity> 
    <service android:enabled="true" android:name=".LicenceService" /> 
    </application> 
</manifest> 

但這項服務強制關閉時與我的主要應用程序內以下稱爲...

com.example.myapp> MainActivity.java:

Intent intent = new Intent(); 
    intent.setClassName("com.example.myapp.licence", "com.example.myapp.licence.LicenceService"); 

    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 

    if (list.size() > 0) { 
     startActivity(intent); 
    } 

任何人都可以請建議這是爲什麼?

(我的道歉,如果我沒有解釋任何東西非常好)

回答

2

更換

List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 

if (list.size() > 0) { 
    startActivity(intent); 
} 

startService(intent); 
+0

我有多傻-_-非常感謝(:我說的對認爲現在整個過程現在將在後臺完成(不凍結主應用程序)??或者我將不得不在服務中創建一個線程來阻止主應用程序鎖定? – 92Jacko

+0

正確。你不需要服務中的另一個線程。該服務不會在UI線程中運行。 – IncrediApp

+0

@IncrediApp,那是錯的! '小心:一個服務在其宿主進程的主線程中運行 - 該服務不會創建它自己的線程,並且不會在單獨的進程中運行' – Arvis