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

loveobjc 2015-02-10 08:57:15
我在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已经关闭了,此时会报空指针异常。这个怎么解决?
...全文
2184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
坂田民工 2018-08-10
  • 打赏
  • 举报
回复
引用 6 楼 u012301841 的回复:
getActivity() != null 这就不报错了...
这个有问题,本身销毁就没有activity了 get不到
清澈@Cherry 2016-02-01
  • 打赏
  • 举报
回复
regersubadm 2015-07-03
  • 打赏
  • 举报
回复
引用 1 楼 inquisitive_plus 的回复:

if(getActivity()!=null){
    //TODO:
}
在子线程中用这种判断还是可能会有问题的。因为你在判断的时候不是null,到执行时getActivity可能已经为空了。
  • 打赏
  • 举报
回复
getActivity() != null 这就不报错了...
网络咖啡 2015-02-10
  • 打赏
  • 举报
回复
在Fragment的onDestroy方法里面退出线程
windfury_plus 2015-02-10
  • 打赏
  • 举报
回复
引用 2 楼 hulovexj 的回复:
如果我要在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
浅笑_JIE 2015-02-10
  • 打赏
  • 举报
回复
fragment的生命周期与开启它的Activity相关 当Fragment所在的Activity关闭时 Fragment同时被关闭掉的
loveobjc 2015-02-10
  • 打赏
  • 举报
回复
引用 1 楼 inquisitive_plus 的回复:

if(getActivity()!=null){
    //TODO:
}
如果我要在activity关闭时把线程也销毁回收。应该怎么处理呢?
windfury_plus 2015-02-10
  • 打赏
  • 举报
回复

if(getActivity()!=null){
    //TODO:
}
liuh6 2015-02-10
  • 打赏
  • 举报
回复
finish前关闭运行的线程

80,363

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧