我们的应用程序正在启动一个事件,可以在按下按钮时下载RSS源并显示媒体。
使用以下代码启动IntentService:
Messenger messenger = new Messenger(new IncomingMessageHandler());
Intent intent = new Intent(getApplicationContext(), RssReaderIntentService.class);
intent.putExtra("Messenger", messenger);
startService(intent);
IntentService也列在下面的AndroidManifest.xml中:
<service android:name=".services.RssReaderIntentService" android:exported="false" />
onHandleIntent方法如下:
@Override
protected void onHandleIntent(Intent workIntent)
{
LOGGER.trace("onHandleIntent");
try {
Messenger remoteMessenger = workIntent.getParcelableExtra("Messenger");
if (bindData(remoteMessenger))
readRss();
}
catch (Exception e) {
e.printStackTrace();
}
stopSelf();
}
当服务第一次运行时它正确执行并调用 onHandleIntent ,但是,当服务再次运行时,它永远不会到达 onHandleIntent。唯一的方法是被称为 onStartCommand。
我很好奇,如果这是因为Android Nougat与Android KitKat的问题(应用程序在KitKat上正常运行)。我研究了折旧以及可能存在的任何变化,但我没有发现可能导致此问题的任何内容。
修改 应用程序在调试时正确调用 onHandleIntent ,而不是在分离调试器时调用。
编辑#2 我们有三种应用程序运行方式不同的方案。 1.设备运行kitkat,处理器速度比其他两个设备慢,该应用程序完美无缺。 2.使用比第一个设备更快的处理器运行牛轧糖的设备,当没有连接调试器时,应用程序仅运行一次服务但是当连接调试器时,它会持续运行服务。 3.使用三个中最快的处理器运行牛轧糖的设备只运行服务一次,无论是否连接了调试器。