gpt4 book ai didi

Android 在另一个完成后立即调用 AsyncTask

转载 作者:IT老高 更新时间:2023-10-28 21:58:17 25 4
gpt4 key购买 nike

我在使用 Android AsyncTask 时遇到了一些问题。有一个 Activity 包含一些 TextView 一个按钮和一张图片。当用户进入此 Activity 时,我启动一个异步任务以检查用户是否可以从 Activity 中前进(直到任务未完成按钮未激活)。然后我想启动另一个异步任务来获取图片。所以我做了一个内部类:

AsyncTask<String, Void, JSONObject>() authTask = new AsyncTask<String, Void, JSONObject>() {
@Override
protected JSONObject doInBackground(String... params) {
//call the rest api
}
@Override
protected void onPostExecute(JSONObject result) {
// check the result
// and make another asynctask
AsyncTask<String, Void, Bitmap> imageTask = new Async.... {
// get image
}
imageTask.execute();
}
}

我调用authTask.execute(); 来自 UI 线程。

对此我有一种不好的感觉,尤其是它似乎不起作用(几次都没问题,但突然它“卡住”:没有异常(exception)只是挂起并且进度条在旋转。没有任何反应,按钮不会积极的。)还有另一种获取信息的方法,当它完成后立即开始另一个任务?

UDPATE:我使用 api 级别 10。在 authTask 中,我得到了一些启动 imageTask 所需的信息(一些 id),所以我必须连续调用这些任务。在 api 级别 10 有可能吗?

提前致谢!

兄弟,彼得

最佳答案

您可以使用 getStatus() 检查 AsyncTask 是否处于挂起、正在运行或已完成。以及何时开始您的新任务。如:

if(authTask .getStatus() == AsyncTask.Status.PENDING){
// My AsyncTask has not started yet
}

if(authTask .getStatus() == AsyncTask.Status.RUNNING){
// My AsyncTask is currently doing work in doInBackground()
}

if(authTask .getStatus() == AsyncTask.Status.FINISHED){
// START NEW TASK HERE
}

您的应用示例:

btn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if (authTask != null && authTask.getStatus() == AsyncTask.Status.FINISHED) {
//START YOUR NEW TASK HERE
}
else
{
//IGNORE BUTTON CLICK
}
}
});

关于Android 在另一个完成后立即调用 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048958/

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