我正在尝试创建一个将在后台处理文件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。
我的服务在我的清单中声明为:
我错过了一些明显的东西吗 让我知道我应该提供哪些其他信息来诊断问题。
也许您不小心将服务标签放在应用程序标签之外? 然后服务就会无声地失败。 虽然日志中应该有“无法启动服务意图…”错误。
请务必在AndroidManifest.xml中声明您的服务
...
似乎onCreate()方法必须在服务实际启动之前退出 。 一旦我删除了getSurveyManagerService()请求,并且经过一段时间后,我收到了System.out消息,指示服务正在启动。
不幸的是,这会产生另一个问题:Activity依赖于服务来获取其数据,因此我需要确定如何使Activity等待服务启动。
编辑:我的解决方案是在我的Activity中创建一个ServiceConnection的私有子类。 然后我重写了onServiceConnected()方法以向Activity提供其数据(在这种情况下填充ListView)。