gpt4 book ai didi

java - 小后台任务的选项

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:11 25 4
gpt4 key购买 nike

我有一个静态方法,可以执行网络“繁重”调用,让我们调用此getDataFromCloudServer()。现在将组成一个新的方便实用方法,该方法将具有此方法。
示例:

public static void periodicUpdate(Context ctx) {  
clearCachedData();
List<Object> newData = getDataFromCloudServer(ctx);
persist(newData);
}

当 UI 线程上的事件发生时,需要触发这个新的方便方法。但显然我无法从 UI 线程调用它。
因此,我想避免向调用者提供小型匿名 AsyncTasks:

public static void periodicUpdateInAsyncTask(final Context ctx) {  
AsyncTask<Void, Void, Void> updaterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
periodicUpdate(ctx);
}
};
updaterTask.execute();
}

我关心的是这是否是一个好主意。基本上我认为 AsyncTask 不是“受控”/取消等。
这里有什么问题以及我该如何正确地写这个?

最佳答案

I think the AsyncTask is not "controlled"/cancelled etc.

实际上,由 AsyncTask 的开发人员决定是否坚持取消状态。

AsyncTask 与其进程的生命周期相关。因此,您可能会遇到一些问题,例如内存泄漏(通过静态声明解决),但请记住,使用后台进程时,您的 priority list for killing 值较低。 。如果您不满意,请使用服务。

如果您想与 Activity 的生命周期绑定(bind),请使用 AsyncTaskLoader。

如果您不打算在 UI 线程中发布结果,则可以使用标准 java 线程。

对于在数据库中缓存结果的网络内容,我会使用服务。

关于java - 小后台任务的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36814283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com