关于android.view.View.unFocus空指针异常偶发崩溃的原因咨询
void android.view.View.unFocus偶发空指针异常的可能成因 嘿,针对你遇到的这个偶发unFocus空指针问题,结合你的应用场景(只做相机/相册选图+上传,没碰onStop这类生命周期方法),我梳理了几个符合你情况的可能成因:
系统焦点恢复的竞态冲突
当你从相机或相册切回应用时,系统会自动尝试恢复之前页面的焦点状态,但如果此时对应的视图还没完成初始化、或者因为某种隐性原因已经被回收(比如页面重建但视图还没attach到窗口),调用unFocus时就会因为目标视图或其内部关联的焦点管理对象为null而抛出异常。这种是系统异步操作和应用视图状态不匹配导致的,所以只会偶发出现。选图后UI更新的并发问题
选图完成后你可能会更新UI(比如显示选中的图片、修改输入框内容等),如果这个更新操作和系统的焦点管理操作同时进行,就可能让视图的焦点状态处于不稳定的中间态。举个例子:系统正要给某个输入框设置焦点,你刚好在修改这个输入框的可见性或者父布局,这时候触发unFocus就容易撞上空指针。第三方图片选择库的隐性操作
如果你用了第三方相机/相册选择库,这些库在返回结果时,可能会隐性地做一些视图操作(比如自动隐藏软键盘,而隐藏软键盘的逻辑会触发unFocus)。如果此时你的应用里某个之前持有焦点的视图已经被销毁,就会触发空指针。这种情况因为库的内部逻辑和你的应用状态偶发不匹配,所以不会每次都触发。内存压力下的视图隐性回收
当应用在后台处理图片上传(尤其是大图)时,系统可能因为内存紧张,偷偷回收一些暂时不可见的视图对象。如果这时候系统刚好要对这些已经被回收的视图执行unFocus操作,自然就会抛出空指针。这种情况只会在内存压力大的时候出现,所以具有偶发性。
内容的提问来源于stack exchange,提问作者Muhammad Abdullah

