问题解决:Fragment not attached to Ac

2018-11-15  本文已影响0人  禄子_c79b

1、问题引入

在Fragment中执行一段耗时任务,在任务未结束的时候,重建Activity就会导致getActivity()为null,所有用到getActivity()的地方都会引起空指针异常,如果使用了getResources()方法,就会导致Fragment not attached to Activity。

2、问题解决

将FirstFragment中onPostExecute()方法中的
tvMsg.setText(getResources().getString(R.string.app_name));

改为
if (isAdded()) {
tvMsg.setText(getResources().getString(R.string.app_name));
}
2或者用getContext()代替

3在Fragment基类里设置一个Activity mActivity的全局变量,在onAttach(Activity activity)里赋值,使用mActivity代替getActivity(),保证Fragment即使在onDetach后,仍持有Activity的引用(有引起内存泄露的风险,但是异步任务没停止的情况下,本身就可能已内存泄漏,相比Crash,这种做法“安全”些),即:
protected Activity mActivity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mActivity = activity;
}

/**

isAdded()方法可以判断当前的Fragment是否已经添加到Activity中,只有当Fragment已经添加到Activity中时才执行getResources()等方法。
另请参考:http://stackoverflow.com/questions/10919240/fragment-myfragment-not-attached-to-activity

当然,以上只是引起该异常的一个例子,并不能解决所有“Fragment not attached to Activity”的问题。

作者:独毒火
链接:https://www.jianshu.com/p/7986206aa9d4
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

上一篇下一篇

猜你喜欢

热点阅读