0

我有一个类可以响应主要活动中的按钮按下来获取数据。不幸的是,我一直遇到问题,因为这个类不是活动或服务。例如,如果没有上下文,我无法将资源 id 转换为字符串:

getString(R.string.example_string); // Doesn't work

我应该把这个类变成一个服务并让主 Activity 在它关闭时停止这个类吗?我应该像这样将 Activity 中的 Context 传递给这个类吗?

MyClass c = new MyClass(this);

或者有没有更好的方法来处理这个问题?

当我尝试从此类中发送 Toast 时,也会出现此问题。

更新: Erich 和 Janusz 向我指出了完美运行的类的方向AsyncTask,除了它创建了一个新线程并且从不终止该线程。这意味着每次用户按下按钮时,都会添加另一个线程,而旧线程只是坐在那里。

4

2 回答 2

4

如果您有一个后台操作,其生命周期与您的活动分离,我会使用Service. 在这种情况下,Service将有自己的Context,因此您不需要将其传入。但是,如果您需要执行后台操作以响应 UI 事件(并可选择将结果发布回 UI 线程) , 我建议你使用AsyncTask.

于 2010-06-09T14:35:53.587 回答
2

我同意 Erich 的观点,如果您只有一些小事情,例如将更改发布到 Web 后端或从手机内存中加载某些内容以在屏幕上显示,请使用Async Task。如果任务将非常“快速”(几秒钟)退出,您可以在您的活动中创建一个匿名类。这将使您能够使用对任务内部外部活动的隐式引用,并且您可以从那里获取上下文。

如果任务运行时间较长,您可以传递上下文。如果您要传递上下文,请尝试不从活动中传递 this.getApplicationContext() 这将最大限度地减少对您的活动的引用数量,并使垃圾收集器能够正确清理。

于 2010-06-09T14:43:08.937 回答