永远不会启动Android服务 - 未调用onStartCommand()

时间:2011-10-07 16:03:14

标签: android service android-service

我正在尝试创建一个在后台处理文件I / O的服务。更新数据的活动将绑定到服务并调用服务的方法来执行I / O.我使用Android文档作为指导。

然而,我的服务似乎并不想开始。在我的Activity的onCreate()方法中,我有:

Intent smsIntent = new Intent(this, SurveyManagerService.class);    
String surveyFilename = getIntent().getStringExtra("surveyFilename");   
System.out.println(startService(smsIntent)); //testing if it starts
SurveyManagerServiceConnection connection = new SurveyManagerServiceConnection();
sms = connection.getSurveyManagerService();

在第3行,LogCat输出一个ComponentInfo对象,因此看起来服务已经创建;但是,短信是空的。此外,似乎永远不会调用SurveyManagerService onStartCommand()方法:

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    System.out.println("starting service");
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    openSurveyFromIntent(intent);
    return START_REDELIVER_INTENT;
}

我从未在LogCat中看到任何“启动服务”输出,也没有看到Toast。

我的服务在我的清单中声明为:

<service android:name=".SurveyManagerService" android:exported="false" android:enabled="true">
</service>

我错过了一些明显的东西吗?让我知道我应该提供哪些其他信息来诊断问题。

4 个答案:

答案 0 :(得分:20)

也许您不小心将服务标签放在了应用标签之外?然后服务就会无声地失败。虽然日志中应该有“无法启动服务意图...”错误。

答案 1 :(得分:15)

请务必在AndroidManifest.xml中声明您的服务

<application>
    ...
    <service android:name=".path.to.service.MyService"/>
</application>

答案 2 :(得分:6)

在服务实际启动之前,似乎onCreate()方法has to exit。一旦我删除了getSurveyManagerService()请求,并且经过一段时间后,我收到了System.out消息,表明服务正在启动。

不幸的是,这会产生另一个问题:Activity依赖于服务来获取其数据,因此我需要确定如何使Activity等待服务启动。

编辑:我的解决方案是在我的Activity中创建ServiceConnection的私有子类。然后我覆盖onServiceConnected()方法以向Activity提供其数据(在这种情况下填充ListView)。

答案 3 :(得分:0)

就我而言,我重构了服务类并注意到清单中并没有自动重构它。因此,我不得不手动更新清单中服务的标准名称。