在OnResume()中使用线程的结果

时间:2013-08-02 19:19:08

标签: android android-asynctask onresume

我的问题:是否可以阻止活动在创建时调用OnResume()?正如我在OnCreate()onStart()方法运行后看到的那样,下一个是onResume(),但是当我从暂停状态恢复活动时我只想拥有它。

为什么我需要这个:我启动我的活动(FragmentActivity,所以让我们说OnPostResume())从一个需要大约2-3s的线程开始准备好来自外部数据库的数据。线程完成后,我调用一个需要这些数据的方法,我想在每次活动可见时调用它。该线程仅在创建FragmentActivity时运行(onCreate()),并且我无法将该方法放入onResume(),因为onResume()将在线程完成其任务之前运行。所以它会收到未准备好的数据。

任何人都有更好的主意?

3 个答案:

答案 0 :(得分:0)

我不明白这个的目的,但这是一个可能的解决方案:

如果您只希望在之前没有onCreate的状态下获得onResume的偶数,只需使用标志。

在onCreate中,将其设置为true,在onResume中检查标志(并将其设置为false)。如果是真的,那就意味着之前调用了onCreate。

答案 1 :(得分:0)

我个人更愿意检查结果是否可用,而不是总是在onResume中执行getter-code。如果用户以某种方式在后台线程完成之前恢复您的活动,则您可以在onResume上进行呼叫,但不希望显示结果。

如果值已经缓存在某处,那么计算/获取线程中的值并让线程立即返回(并导致值被填充)可能是个好主意。这样,您只需要一个入口点(线程)来更新UI而不是两个(线程和onResume方法)。

答案 2 :(得分:0)

不确定这个的确切应用,但我会提出建议。

如果您使用AsyncTask,则可以将其发送以获取所需数据,并使用onPostExcecute()方法调用需要数据的方法或根据需要更新视图。 (它在UI线程上运行)

如果您在某些情况下碰巧已经拥有了所需的数据,您还可以绕过AsyncTask并直接更新视图。

可以使用onResume()方法触发此AsyncTask。

如果我遗失了什么,请告诉我,我可以调整我的建议。