我的应用程序不使用NDK.我正在GenyMotion Nexus 7仿真器上测试它,问题很难再现,我仍然没有想出一个正确的方法来重现它.有时候应用程序可以正常运行很长时间,有时它会崩溃并在使用大约30秒后自动重启.
编辑:我不是100%,但它只发生在genymotion模拟器,但不是常规的Android模拟器(我会继续测试).
当我在横向模式下添加对大屏幕的支持时开始出现问题(开始在横向中一次显示两个片段,纵向仅显示1个片段(宽度小于720)).
其中一个片段延迟加载图像(来自内存,磁盘或互联网).
我对这种动态添加和删除片段很新,所以我确信那里可能有一些东西.
无论如何,请帮助我解码这个转储并找出导致崩溃的原因(我会尝试省略我觉得不重要的东西):
12-17 16:52:18.344 1255-1255/? A/libc? Fatal signal 11 (SIGSEGV) at 0x97858094 (code=2), thread 1255 (hiexpressgradle)
12-17 16:52:18.448 121-121/? I/DEBUG? *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-17 16:52:18.448 121-121/? I/DEBUG? Build fingerprint: 'generic/vbox86tp/vbox86tp:4.3/JLS36G/eng.buildbot.20131127.101043:userdebug/test-keys'
12-17 16:52:18.448 121-121/? I/DEBUG? Revision: '0'
12-17 16:52:18.448 121-121/? I/DEBUG? pid: 1255, tid: 1255, name: hiexpressgradle >>> XXX <<<
12-17 16:52:18.448 121-121/? I/DEBUG? signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr …Run Code Online (Sandbox Code Playgroud) 当我在Android中使用HashMap带有Integer键和数据值时,我在Eclipse中收到此消息:
Use new SparseIntArray(...) for better performance
Run Code Online (Sandbox Code Playgroud)
现在问题是SparseIntArray()没有实现Serializable接口而且不能getSerializable()和putSerializable()in 一起使用onRestoreInstanceState().
使用SparseIntArray()而不是使用有多重要HashMap<Integer, Integer>?
我应该经历制作SparseIntArray序列化的麻烦吗?(我的第一个想法是制作一个实现的包装类,Serializable这是正确的方法吗?)
在阅读本文之后,我遇到了这个问题:性能提示(特别是名为"异步加载"的部分).基本上他正在尝试保存有关行的信息以查看它是否已被回收,并且只有在行仍然可见时才设置下载的图像.这就是他如何挽救这个位置:
holder.position = position;
new ThumbnailTask(position, holder)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
Run Code Online (Sandbox Code Playgroud)
ThumbnailTask构造函数是:
public ThumbnailTask(int position, ViewHolder holder) {
mPosition = position;
mHolder = holder;
}
Run Code Online (Sandbox Code Playgroud)
在onPostExecute()中,他然后执行前面提到的检查:
if (mHolder.position == mPosition) {
mHolder.thumbnail.setImageBitmap(bitmap);
}
Run Code Online (Sandbox Code Playgroud)
我只是看不出这会给出任何结果.Holder和position在构造函数中同时设置为相同的值(holder中的位置与mPosition中的位置相同).它们在AsyncTask期间不会被更改(确实位置可能在getView()中更改,但存储在AsyncTask中作为私有成员的那些永远不会被操纵).我在这里错过了什么?
同时保存位置似乎并不是一个好的选择:我相信它不能保证是唯一的,如果我没记错,它会在滚动后重置为0.我在想正确的方向吗?
对api.bookings的调用以预定义的顺序返回预订列表.对api.order()的调用会返回一个预订,但会有一些额外的信息.应用flatMap()后,预订列表的顺序搞砸了.(bookings.toList()只是一个列表,如果预订).如何按照.from(bookings.toList())发出的顺序获取zip函数中的值.注意:我无法使用toSortedList,因为我无法比较两个预订.
bookingsSubscription = api.bookings()
.flatMap(bookings ->
Observable.zip(
Observable
.from(bookings.toList())
.flatMap(booking -> api.order(booking.orderId)),
Observable.from(bookings.toList()),
(newBooking, oldBooking) -> {
// at this point newBooking != oldBooking
}
).toList())
.subscribe(callback);
Run Code Online (Sandbox Code Playgroud)
api.order