代码之家  ›  专栏  ›  技术社区  ›  Computerish

何时在Android中使用服务

  •  0
  • Computerish  · 技术社区  · 15 年前

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

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

    我应该让这个类成为一个服务,当它关闭时让主要活动停止它吗?我应该像这样将上下文从活动传递到这个类中吗?

    MyClass c = new MyClass(this);
    

    还是有更好的方法来解决这个问题?

    当我试着向这个班的学生敬酒时,这个问题也会出现。

    更新: 埃里希和詹纳斯把我指向 AsyncTask 类,除了它创建一个新线程并且从不杀死该线程外,它工作得很好。这意味着,每当用户按下一个按钮时,就会添加另一个线程,而旧线程就在那里。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Erich Douglass    15 年前

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

        2
  •  2
  •   Janusz Daniel Rindt    15 年前

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

    如果任务运行时间较长,则可以传递上下文。如果要传递上下文,请尝试不从活动传递此内容,请使用this.getApplicationContext(),这将最小化对活动的引用数,并使垃圾收集器能够正确清理。