Android 5.1:尝试在空对象引用上写入字段'java.util.ArrayList android.animation.AnimatorSet $ Node.nodeDependents'

时间:2015-05-19 18:18:02

标签: java android

java.lang.NullPointerException:尝试在空对象引用上写入字段'java.util.ArrayList android.animation.AnimatorSet $ Node.nodeDependents'

从Android 5.0迁移到5.1后我遇到了这个问题,当我尝试使用克隆的LayoutInflater进行充气时,就会发生这种情况。如果我只使用常规布局inflater就可以了。此次通货膨胀也发生在使用threadPool执行程序的后台线程上,因为出于性能原因需要同时进行两次相同的布局。如果我切换到使用序列化执行程序也可以。

final LayoutInflater bgLayoutInflater = layoutInflater.cloneInContext(getContext());
final ViewGroup rootView = (ViewGroup) bgLayoutInflater.inflate(resourceId, null, false);

link to the AOSP where crash happens, line 699

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

所以最后我自己想出了这个问题。无论新的5.1 AOSP更改应该返回一个更好的错误来告诉我出了什么问题,我在后台线程中冒充大的布局会让我自己承担风险。

我相信发生了什么事。

final LayoutInflater layoutInflater = (LayoutInflater)
            getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

我需要用最快的时间来扩展两个大布局(每个600ms),所以我决定使用asyncTask和threadPoolExecutor来执行两个通胀任务。但我无法实现它,因为SystemService的layoutInflater是同步。所以我做了一个克隆的inflater解决了这个问题,直到5.1。

现在我可以用

修复它
 final LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 

这样每个inflater都会并行完成自己的工作。同样,我仍然面临着不在UI线程上进行膨胀的风险,将来新的更新可能仍会在某个地方破坏它。