安全地在AsyncTask中调用getActivity()

时间:2016-04-01 21:02:27

标签: java android android-asynctask

当我让它在后台运行时,我的应用程序一直崩溃,然后回到屏幕上显示应用程序。我相信它与我在onResume()中运行的AsyncTask有关。在其中一条评论的answer中,该人告诉"保持活动实例的跟踪并使异步任务等待它不为空。"那么我究竟该如何让它等到它不为空呢?

一般而言,当您在Fragment中运行AsyncTask时,最活跃的方式是什么才能在活动/片段生命周期更改期间工作?

3 个答案:

答案 0 :(得分:1)

首先,您可以在创建片段时使用包含该片段的活动对getactivity()进行类型转换,并使 mActivity 全局变量。

MainActivity mActivity = (MainActivity)getActivity(); 

您可以在Asynctask中进一步使用该变量,并可以进一步检查活动是否已完成(不检查null)

mActivity.isFinished();

答案 1 :(得分:0)

在后台或后台堆栈中,永远不要指望x = np.array([1,2,3,4,5]) index = np.argwhere(x==3) y = np.delete(x, index) print(x, y) 正在运行(或甚至存在)。将Activity置于保留的AsyncTask中是保持任务在配置更改(例如,设备轮换)之间运行的好方法,但不是在活动在后台时。任何应该在后台运行的东西都属于Fragment

答案 2 :(得分:-1)

不推荐。如果您需要在AsyncTask中访问您的活动,那么最好的方法是创建一个接口,让您的活动实现此接口并在AsyncTask构造函数上传递活动实例。您的AsyncTask将需要接口类型的属性。因此,您可以通过此接口调用活动上实现的方法