我正在尝试创建一个在后台处理文件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>
我错过了一些明显的东西吗?让我知道我应该提供哪些其他信息来诊断问题。
答案 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)
就我而言,我重构了服务类并注意到清单中并没有自动重构它。因此,我不得不手动更新清单中服务的标准名称。