当前位置: 代码迷 >> Android >> activity回退finish关闭后,fragment开启的线程导致空指针错误?
  详细解决方案

activity回退finish关闭后,fragment开启的线程导致空指针错误?

热度:71   发布时间:2016-04-28 02:17:45.0
activity回退finish关闭后,fragment开启的线程导致空指针异常??
我在fragment被添加到一个activity中,并且fragment中开启了一个线程:线程代码如下:

 new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
update();
}
        
        }).start();
public void update() {

User user = SafeHeroApplication.getInstance().getUser();
Watch watch = user.getWatch();
String groupid = watch.getGroupid();
try {
for(EMGroup emGroup : groupList) {
emGroup = EMGroupManager.getInstance().getGroupFromServer(emGroup.getGroupId());
EMGroupManager.getInstance().createOrUpdateLocalGroup(emGroup);
//修复回退退出程序activity退出,线程未退出而引起的空指针问题
getActivity().runOnUiThread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
adapter.notifyDataSetChanged();
}

});
}
} catch (EaseMobException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
 
当activity退出时,可能会发生线程还未开始执行时,当activity退出后,线程执行到 getActivity().runOnUiThread时由于activity已经关闭了,此时会报空指针异常。这个怎么解决?
------解决思路----------------------

if(getActivity()!=null){
    //TODO:
}

------解决思路----------------------
fragment的生命周期与开启它的Activity相关 当Fragment所在的Activity关闭时 Fragment同时被关闭掉的
------解决思路----------------------
引用:
如果我要在activity关闭时把线程也销毁回收。应该怎么处理呢?

用到activity的对象时判断是否为空吧,空则return。
这里应该是adapter和getActivity有可能

用handler回收你的线程
//ps:看android api的解释:回收的mRunnable是还未运行的,暂没想到很好的测试例子
//Remove any pending posts of Runnable r that are in the message queue.
mHandler.removeCallbacks(mRunnable);   

参考:http://mobile.51cto.com/aprogram-380459.htm
------解决思路----------------------
在Fragment的onDestroy方法里面退出线程
------解决思路----------------------
getActivity() != null 这就不报错了...
------解决思路----------------------
finish前关闭运行的线程
  相关解决方案