运行简单后台任务的最简洁方法是什么?

7 浏览
0 Comments

运行简单后台任务的最简洁方法是什么?

在工作线程中运行一些代码至少有五种模式。其中最简单的:

new Thread(new Runnable() {
    public void run() {
      //
    }
}).start();

我们可以扩展AsyncTask;我们有AsyncTaskLoader和其他用于数据的LoaderService等等。

我假设每一种模式都有一些优势,我在这里不讨论。我想知道的是:哪一种是最合适、简洁的运行简单操作的方式?

定义简单:

  • 相当短的操作,<1s;
  • 不需要处理UI元素;
  • 只有一行命令之类的,所以扩展一个新类来继承AsyncTask看起来不合适;
  • 不需要在ActivityFragment中被通知任务的成功;
  • 不需要显示进度;
  • 只需要某种形式的return

我最初想到的是:

boolean myReturn;
new Thread(new Runnable() {
    public void run() {
      myReturn = myExtensiveTask();
    }
}).start();
public boolean myExtensiveTask() { ... }

这样做正确吗(或者甚至可能吗)?应该如何做到这一点?

0
0 Comments

在使用Bolts实用框架时,可以简单地运行一个后台任务。使用Task.callInBackground()方法可以在后台线程中运行一个Callable对象,并返回一个结果。

代码示例中,首先创建了一个Callable对象,并实现了call()方法。在call()方法中,执行了doWork()方法,并将结果赋值给obj变量。最后,将obj作为返回值返回。

Task.callInBackground()方法接受一个Callable对象作为参数,并在后台线程中执行该对象的call()方法。这样就可以在后台线程中执行一些耗时的操作,而不会阻塞主线程。

使用Bolts框架的这种方式可以简洁地运行一个简单的后台任务,可以在需要进行耗时操作的情况下使用。

0
0 Comments

在这个讨论中,问题的出现原因是如何以最简洁的方式运行一个简单的后台任务。解决方法包括使用库代码和构建基础设施。

在讨论中,某些情况下了在当前项目中实现了一种方法,可以编写一个类似于以下代码的方法:

("0 * * * * ?")
public void runsEveryMinute()
{
    System.out.println("It ran!");
}

这种方法使用了QuartzScheduler库来实现任务调度。还提到了Spring可以通过导入Quartz支持来实现类似的语法。

讨论还提到,如果创造性地使用注解,可以有很多解决方案。例如,如果有一个构建菜单的类,可以使用注解来抽象所有的菜单构建语法。然后,可以编写另一个类来遍历带有注解的类,并为其构建菜单。这种解决方案具有100%的可重用性,可以在任何项目中使用,无需手动构建菜单。

讨论还提到了使用Java 8可以轻松实现所需的功能。在Groovy中(具有类似于Java 8的闭包),可以使用类似于以下代码的语法:

new Thread() {
    println "this will run in another thread"
}

还提到了考虑构建一些基础设施来简化将来的调用。

最后,有人表示会进一步研究并考虑构建一些基础设施的建议。

解决这个问题的最简洁的方法是使用库代码或构建基础设施。使用QuartzScheduler库可以实现任务调度,而使用注解和遍历可以简化菜单构建。使用Java 8或类似于Java 8的语言,可以更容易地实现所需的功能。

0