Android 仅当此类异步任务当前未运行时,才从创建活动时启动的异步任务。我该如何实现这一点?
在打开一个新屏幕(活动)时,我希望我的程序启动一个新的异步任务,该任务将永远每X间隔运行一次。我不想创建一个,如果另一个已经在运行 我用全局变量、共享首选项标志等尝试了很多方法。是否有一种方法可以扩展AsyncTask,但将线程池更改为1,这样就不会启动重复的线程池 还是有更明显的解决方案 注意:首选项的问题是,如果设备重新启动,它可能会将标志保存为永久“true”,表示有任务正在运行,而没有,从而阻止新任务运行Android 仅当此类异步任务当前未运行时,才从创建活动时启动的异步任务。我该如何实现这一点?,android,multithreading,android-asynctask,threadpool,Android,Multithreading,Android Asynctask,Threadpool,在打开一个新屏幕(活动)时,我希望我的程序启动一个新的异步任务,该任务将永远每X间隔运行一次。我不想创建一个,如果另一个已经在运行 我用全局变量、共享首选项标志等尝试了很多方法。是否有一种方法可以扩展AsyncTask,但将线程池更改为1,这样就不会启动重复的线程池 还是有更明显的解决方案 注意:首选项的问题是,如果设备重新启动,它可能会将标志保存为永久“true”,表示有任务正在运行,而没有,从而阻止新任务运行 我尝试这样的事情愚蠢吗???如果你想每隔一秒钟在后台运行一些东西,那么你需要使用S
我尝试这样的事情愚蠢吗???如果你想每隔一秒钟在后台运行一些东西,那么你需要使用Service或IntentService。事实上,如果您使用服务,那么您就不必担心线程重复,因为除非您创建多个服务,否则后台将始终只有一个运行。将Asynctask存储在一个字段中
task = new NewAsyncTask().execute();
每次检查是否完成并重新分配到同一字段新任务
if(task.getStatus() == AsyncTask.Status.FINISHED)
task = new NewAsyncTask().execute();
使用单例模式,类似于:
public class SingletonTask extends AsyncTask {
private static SingletonTask instance;
public static startTask(params, callback) {
if (instance == null) {
instance = new SingletonTask(params, callback);
instance.execute();
}
}
....
onPostExecute() {
instance = null;
}
}
然后从活动中调用SingletonTask.startTask(…)
免责声明:即时输入,不会编译。我不想使用服务,因为我确实希望能够操作和更新UI线程。此后台任务可能与主活动窗口交互。这是不对的吗?我需要诸如上下文、活动之类的东西,并且我知道OnProgress和OnPostExecute是为与UI线程一起工作而设计的。除了想一想,我的大部分任务都是在后台进行的。不确定进度是如何工作的,但我想我可以在后台告诉OnPrograss说:更新UI列表视图?您仍然可以使用服务与UI线程交互。在您的服务中,您可以发送广播(意图)。然后在你的UI线程上,你可以使内部类扩展BroadcastReceiver,它实现onReceive()。你能看到一个运行在thread.sleep(xxxxx)无限循环上的服务有什么问题吗?没有问题。这就是服务的全部要点。您可以根据需要使用GlobalApplication来控制何时启动和何时停止服务。与SingletonTask或Async with a field相比,您认为这有什么优势?很抱歉耽误你的时间,但我在这里学习的背景很少。还有什么是“全局应用程序?”方法?AsyncTask对象只使用一次。