我正在创建一个将下载大约 30 张图像的应用程序。假设它需要超过 10 秒。我一直在阅读有关 AsyncTask
的内容,我想它不应该被使用,因为该任务将花费超过几秒钟的时间。
AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by the java.util.concurrent pacakge such as Executor, ThreadPoolExecutor and FutureTask.
在查看 ASyncTask
的 API 时,我发现有一些方法可以发布到 UI 线程。如果我理解正确的话,执行长时间运行任务的更合适的方法是使用 FutureTask
?这意味着我必须自己将更新发布到 UI 线程。您使用 post(Runnable)
method of View 是否正确? ?
无论我是否在正确的轨道上,我都可能需要一些指导。
最佳答案
您可以将短操作理解为与 Activity 的生命周期相关的操作。
您可以使用在 UI 线程上执行的 onProgressUpdate()
回调来更新 UI。
但是,如果您的 Activity 在此过程中继续暂停,这很可能会崩溃,因此您应该使用 task.cancel(true)
在 onPause() 中取消您的任务;
如果您需要您的任务在您的 Activity 中存活下来,那么您应该使用 Service 或 ServiceIntent。前者有点复杂,因为您必须管理它的生命周期,但提供了更大的灵 active 。第二个非常简单,所以我可以在这里给你举个例子:
public class MyIntentService extends IntentService{
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
// Background work in a worker thread (async)
// You could also send a broadcast if you need to get notified
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("whatever");
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);
}
}
你可以从你的 Activity 开始
Intent i = new Intent(context, MyIntentService.class);
context.startService(i);
关于java - 在 Android 上执行长时间运行的任务时选择哪种策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572337/