2012-11-01 107 views
2

我有一個IntentService,我想從onCreate開始。這是一場火災,忘了打電話給一個網站,然後(可能)通過下載管理器開始下載。我不相信我的服務正在啓動,因爲我沒有看到它的任何Log語句。我的清單中有這個服務,與main相同。它也沒有出現在我的logcat(另一個線程說它應該)。Android IntentService從來沒有叫

的onCreate:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    Intent heartbeat = new Intent(this, Heartbeat.class); 
    startService(heartbeat); 
} 

*我也試過this.startService(心跳);而且它也沒有工作。

清單:

<application 
    android:debuggable="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <service android:name=".Heartbeat" android:enabled="true"/> 

    <activity 
     android:name=".MainActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:label="@string/title_activity_main" > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

*有或沒有Android:啓用標誌都沒有區別

IntentService開始:

public class Heartbeat extends IntentService 
{ 
    public Heartbeat() 
    { 
     super("Heartbeat"); 
     Log.v("SUPER", "SUPER"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) 
    { 
     Log.v("HERE", "HERE"); 
     //do other stuff 

無論這些日誌報表的控制檯/ logcat中露面,並且我的服務從未訪問過Web服務器(此代碼以前是在asynctask中運行的)。關於我在做什麼的任何想法都是錯誤的?

編輯 - 我看到來自標記ActivityManager的警告,在我的所有消息中都聲明「無法啓動服務意圖{act = com.example.vs_1.Heartbeat}:未找到」。然而,幾乎我所看到的關於該消息的每個建議都是將其放在應用程序標籤中,我已經完成了。

+0

我也試着將Main/manifest中的Heartbeat.class和.Heartbeat分別轉換爲它們的長名字com.whatever,無濟於事。 –

+0

你的代碼是好的。我想你在日誌控制檯中出錯了)(你確定過濾了詳細信息(你叫'Log.v()'),你的應用在控制檯設置中設置了嗎?你使用eclipse還是獨立ddms?) –

+0

很確定,我可以添加Log.v(「AFTER」,「AFTER」);在startService之後,我在logcat中看到。我正在使用eclipse。所以如果代碼看起來不錯,我有什麼選擇?我想要使​​用IntentService,因爲它看起來非常適合,但我想我可以把它作爲一個asynctask放回去,它在今天早些時候開始工作。 –

回答

3

啊,情節變厚了!

「無法啓動服務」是一個錯誤,即使它被標記爲警告。

這是因爲系統找不到具有列出名稱的類。在這種情況下, 它是com.example.vs_1.Heartbeat。

要確保你有那類的,你需要的是包含

包com.example.vs_1文件Hearbeat.java;

公共類心跳擴展IntentService ...

在你的清單,如果你的元素包含屬性 包=「com.example.vs_1」,那麼你可以說

注意句點(」 。「)在」心跳「之前。

如果你使用其他值「包」​​,那麼你就不得不說

/com.example.vs_1.Heartbeat」哪裏是價值‘包’。

它應該是從中明確你應該爲你的類選擇一個主包名稱,併爲「包」值使用相同的名稱。

+0

就是這樣,一旦我把它放入另一個文件Heartbeat.java中,它就起作用了。我覺得它在MainActivity.java文件中找不到它,這似乎很奇怪。我沒有足夠的代表來支持你,但是當我做到的時候我當然會。 –

0

您確定主要活動正在正確啓動嗎?如果系統無法啓動您的IntentService,LogCat會向您顯示錯誤消息。另外,這些是「詳細」消息,因此請確保將LogCat設置爲顯示它們。如果您將LogCat設置爲「錯誤」,則不會顯示詳細消息。

+0

據我所知它已正確啓動。啓動,並顯示我的空白頁面,我也可以做一個Log.v(「AFTER」,「AFTER」);在啓動服務之後,我看到了輸出,我也意識到在我的所有消息中,從標記ActivityManger ,我看到這個警告(雖然不是錯誤)「無法啓動服務意圖{act = com.example.vs_1.Heartbeat }: 未找到」。谷歌搜索雖然沒有帶來除了我見過的其他建議。所以我想我至少已經證實它沒有正確啓動。 –