0

我以前让我的应用程序只处理活动,现在正在转换为片段以改进 UI。

以前,我Activity启动了一个AsyncTask并传入自身以用作Context某些方法需要它的时候(不是 UI 操作,而是对共享首选项和内容提供者的调用)。我现在了解到,如果Activity被销毁并收集垃圾,这种方法可能会导致不良结果,但它确实编译并运行良好。

我开始这个改变是因为我想让我的加载屏幕在应用程序暂停和停止时表现得更好。我意识到人们不喜欢在 Android 中加载屏幕,但对我来说这是必需的,因为我有一个需要 20 秒左右的操作,并且需要在应用程序运行之前完成。

因此,使用本指南,我开始改进我的应用程序。

简而言之,该指南将 移动AsyncTask到一个Fragment没有附加 UI 的,带有一个单独Fragment的用于显示加载屏幕的ProgressBar. 这意味着产生 的片段AsyncTask没有上下文,这意味着我不能将一个传递给AsyncTask.

正如我之前所说,我有AsyncTask需要Context对象的操作,那么我可以从哪里得到它呢?AsyncTask我应该在开始之前将这些数据传递给吗?

4

2 回答 2

2

据我所知,上下文不是静态属性,因此您实际上需要一个对象来检索它。

因此,您可以像本文中那样采用“hack-way”:

在 Android 上获取“上下文”的静态方法?

或者您可以遵循 Android 指南并使用服务进行后台加载。请记住,这AsyncTask是一个实用程序类,旨在帮助稍后需要与 UI 通信的后台操作,因此您应该AsyncTask与 UI 对象关联使用。如果您改为使用 a Service,那么您没有问题,因为Service对象本身就是您需要的上下文。

于 2013-07-18T15:24:21.127 回答
0

如果您的 AsyncTask 没有处理任何 UI 组件,您可以使用父 Activity 的上下文。因此,您之前通过的地方this现在将通过getActivity()。请注意,如果您确实更改了用户界面,这将为您设置空指针异常。

于 2013-07-18T15:27:32.737 回答