2012-11-01 70 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 }: 未找到”。谷歌搜索虽然没有带来除了我见过的其他建议。所以我想我至少已经证实它没有正确启动。 –