我一直在阅读其他文章,以追踪SIGSEGV在Android应用程序中获取的原因。我计划在我的应用程序中搜索与Canvas使用相关的可能的NullPointers,但我SIGSEGV每次都会使用不同的内存地址。另外我看过code=1和code=2。如果内存地址是0x00000000,那么我就知道它是NullPointer。 我得到的最后一个是code=2: A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2) 关于如何追踪这个的任何建议? 我有一个嫌疑犯,但是我还不愿意尝试它。我的应用程序使用OSMDroid API进行离线映射。OverlayItem类表示地图上的标记/节点。我有一个服务,可通过网络收集数据以填充OverlayItem,然后将其显示在地图上。为了简化设计,我将OverlayItem扩展到我自己的NodeOverlayItem类中,该类包括我在UI Activity和Service中使用的一些附加属性。这给了我关于UI和服务的单点信息。当发生更改时,我使用Intents广播到Activity来刷新UI映射。活动绑定到服务,并且有一个Service方法来获取NodeOverlayItem的列表。我认为这可能是OSMDroid API对OverlayItem的使用,和我的服务同时更新节点信息。(并发问题) 在我撰写本文时,我认为这确实是问题所在。令人头疼的不是将Node和OverlayItem从NodeOverlayItem中分离出来,而是因为Activity需要来自Node的一些数据,而该数据是服务所拥有的。另外,当创建活动(onResume等)时,需要根据活动不在时服务一直在维护的Node数据重新创建OverlayItem对象。例如,您启动应用程序,服务会收集数据,UI会显示它,您转到首页,然后回到应用程序,活动将需要从最新的服务节点数据中提取并重新创建OverlayItem。 我知道这不是一个很好的或明确的问题。就像我所有的SO问题都是利基或晦涩的。如果有人对如何解释这些SIGSEGV错误有任何建议,将不胜感激! 更新 这是在调试会话期间捕获的最新崩溃。我有3个这样的设备用于测试,在我进行开发和测试时,它们并不会全部崩溃。我添加了一些额外内容,以便可以记录GC日志记录。您可以看到该问题可能与内存耗尽无关。 03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102 03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though. 03-03 02:02:38.406: …
最近,我们突然看到了以下一些堆栈跟踪。为什么会这样呢?这是从应用程序尝试通过媒体通知和所有内容将音频评论服务移至前台时开始的。 java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE at android.os.Parcel.createException(Parcel.java:1942) at android.os.Parcel.readException(Parcel.java:1910) at android.os.Parcel.readException(Parcel.java:1860) at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198) at android.app.Service.startForeground(Service.java:695) at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372) at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328) at com.example.app.services.AudioService.onStartCommand(AudioService.java:228) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667) at android.app.ActivityThread.access$1600(ActivityThread.java:199) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: android.os.RemoteException: Remote stack …