我的程序在 SDK 4.0.4 下开始失败,但在 SDK 2.3.3 上运行,这没有意义。
基本流程是:
- 第一个活动启动远程服务,然后单击按钮调用第二个活动
- 第二个活动绑定到服务,然后退出,logcat 中没有任何内容可以解释它发生的原因。
这是我在服务启动后看到的:
04-15 09:13:46.614: I/ErrandAssistantService(7015): Setting a new request for location updates
04-15 09:13:46.661: I/ErrandAssistantService(7015): saveProximityAlert - used GPS
04-15 09:13:46.669: I/ErrandAssistantService(7015): saveProximityAlert - used network
04-15 09:13:46.677: I/ErrandAssistantService(7015): saveProximityAlert - used GPS
04-15 09:13:46.681: I/ErrandAssistantService(7015): saveProximityAlert - used network
这发生在第二个活动中:
04-15 09:13:47.044: I/MapViewActivity(7039): OnResume: mapView loaded = true
04-15 09:13:47.083: I/MapActivity(7039): Handling network change notification:CONNECTED
04-15 09:13:47.196: I/ErrandMapActivity(7039): onServiceConnected
04-15 09:13:47.196: I/ErrandMapActivity(7039): registering callback
04-15 09:13:47.200: I/ErrandAssistantService(7015): registerCallback
04-15 09:13:47.200: I/ErrandMapActivity(7039): onResume - binding succeeded
然后我看到这个来自服务,试图将信息发送到第二个活动(已经退出):
04-15 09:13:49.142: I/ErrandAssistantService(7015): Sent location changed callback
04-15 09:13:49.142: I/ErrandAssistantService(7015): Sent route changed
04-15 09:13:49.142: I/ErrandAssistantService(7015): geoPoint set
因此,该活动已绑定到该服务,然后该服务将数据发送回该活动,但该活动已经退出。
如果我将其设置为高于 10,则它会崩溃,否则它可以正常工作:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="10" />
那么,如何解决更高版本的 SDK 使应用程序崩溃而无一例外,并且它没有通过onStop
或onDestroy
?
在第二个活动中,我有这个,它没有被调用,所以它的退出似乎是异常的。
@Override
public void onStop() {
Log.i(TAG, "onStop");
super.onStop();
}
如果我将 SDK 版本设置为 17,但手机是 SDK 2.3.3,则它不会崩溃,但这似乎与我将 SDK 版本设置为 10 并且手机版本相同4.0.4。
我还尝试了第二个未绑定到服务的活动,但观察到了相同的行为,因此它似乎与远程服务无关。
我还让服务在与活动相同的进程中运行,以查看是否可以获得任何调试信息,但这也没有给我任何额外的信息。
我不喜欢将 SDK 版本设置得这么低,但我需要进行新的更新,这是唯一可行的解决方案。