Android如何阻塞一个线程让其等待一个时间发生之后再继续执行?

【背景】我创建了几个Fragment,里面有一些TextView代表一些信息。现在有一个异步线程AsyncTask从网络上获取信息,并在获取之后通过回调机制(Fragme... 【背景】我创建了几个Fragment,里面有一些TextView代表一些信息。现在有一个异步线程AsyncTask从网络上获取信息,并在获取之后通过回调机制(Fragment里实现了一个Interface,这个Interface实例化的方法onInformationGot()会调用Fragment里的setTextView())来更新Fragment里的这些信息。
【问题】但现在出现一个问题:从网络获取信息完毕的时间先于Fragment调用onCreateView()的时间,也就是说,当回调执行onInformationGot()(从而调用setTextView()来设置Fragment信息)时,那些TextView还没有实例化(TextView们是在onCreateView()中通过rootView.findViewById()实例化的)。于是在setTextView()时会出现NullPointerException。
【求解答】现在我希望达到这样的效果:让异步线程AsyncTask获取完网络信息正要回调更新Fragment时让它暂停,等待Fragment执行了onCreateView()之后再唤醒它让它执行fragmentInterface.onInformationGot()方法来更新Fragment。
请给位大神指教!多谢!
展开
 我来答
生活小佑哥
2019-07-19 · TA获得超过4106个赞
知道大有可为答主
回答量:3137
采纳率:25%
帮助的人:215万
展开全部
你所谓的线程阻塞是指的ui线程吗?这应该是从你在开发的经验以及测试当中去体验的,如果你说是用代码去判断线程阻塞的话,估计比较复杂,也没那个必要,android的机制在出现ui线程阻塞的话会出现anr给予用户提示,出现这样的情况是开发者在开发过程中就得去避免的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
manwu91
2014-08-28 · TA获得超过486个赞
知道小有建树答主
回答量:385
采纳率:71%
帮助的人:288万
展开全部
你可以在onCreateView结束后再调用异步线程AsyncTask啊,或者在fragment其他生命周期方法中调用这个异步线程啊
更多追问追答
追问
AsyncTask是在MainActivity里面调用执行的,不能放在Fragment里面调用呀。他们是MainActivity里面创造的两条线,一条线创建Fragment对象,另一条线负责在网络上获取信息并更新Fragment
追答
你把代码发出来看看。既然是异步任务在哪调用关系不大的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ykhotdog
2014-08-28 · 超过46用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:83.7万
展开全部
如果这里使用线程wait那一套,代码会变得很复杂。
就你现在的情况,最简单的办法是将你的AsyncTask.excute()方法的调用放到onCreateView()的最后,也就是说,当界面生成后,再开启数据获取线程,然后得到数据更新界面
追问
AsyncTask是在MainActivity里面调用执行的,不能放在Fragment里面调用呀。他们是MainActivity里面创造的两条线,一条线创建Fragment对象,另一条线负责在网络上获取信息并更新Fragment。还有其他方法不?
追答
你非要这样可以复杂点。2个标志位,boolean isGet,isCreate=false;
然后把更新界面的那几行代码提出到一个方法里面,如setDataOnView(data);
还要一个frament的public方法注入数据,以便在activity里的线程获取数据后,将数据传入fragment.如:setData(data);
在onCreateView()的最后:
isCreate = true;
if(isGet){
setDataOnView(data);
}

在fragmentInterface.onInformationGot()方法最后:

isGet = true;
frament.setData(data);
if(isCreate){
frament.setDataOnView(data);
}

这样,无论你哪个线程先执行结束,最终都能更新界面。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式