gpt4 book ai didi

android - Android 平板电脑中未调用 Asynctask DoInBackground ()

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:38 28 4
gpt4 key购买 nike

在 android 中开发一个应用程序我使用了 Asynctask 类,当我在运行 2.3.5 的 Android 设备上测试时工作正常,但我面临的问题是,我的平板电脑 4.0.4 不起作用

在测试时,知道正在调用 prexecute() 但没有调用 doInbackground(),但是在设备 (2.3.5) 上调用了 doInbackground()。

我认为这个问题的一个原因是平板电脑的处理器比设备的处理器快得多,所以可能是一些线程问题,为什么,为了解决这个问题,我使用了一些标志,并使用了线程。 sleep() 在一个 do while 循环中,这样当条件为真时,它就可以工作,但运气不好,我陷入了循环本身。这是我的代码:

MyAsyncTask object = new MyAsyncTask (MainActivity.this);
runOnUiThread(new Runnable() {
public void run() {

try {
if (object.isReady() || !object.isStarting()) {
return;
}

object.execute();

do {
Thread.sleep(1000);
} while (!object.isReady() && object.isStarting());

if(!object.isReady()) {
return;
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}
});

异步任务类:

public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{

private ProgressDialog dialog;
private Context context;
private boolean isStarting = false;
private boolean isReady = false;


public AsyncUpdatesofJquery(Context context) {
this.context = context;
isStarting = true;
isReady = false;
}

public boolean isStarting() {
return isStarting;
}

public boolean isReady() {
return isReady;
}

@Override
protected void onPreExecute() {

isStarting = true;
isReady = false;
dialog = new ProgressDialog(context);
dialog.setMessage("Downloading Files, Please wait...");
dialog.show();
}

@Override
protected Boolean doInBackground(Void... params) {

isReady = true;
isStarting = false;
downloadFiles(context); // my background task

return true;
}

@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
context.startActivity(new Intent(context, NewActivity.class));
dialog.dismiss();
isReady = false;
isStarting = false;

}
}

最佳答案

多线程模型在 2.3.5 和 4.0.4 之间发生了变化。 AsyncTask 现在默认让应用程序中的所有子类使用同一线程(即一次只能运行一个 AsyncTask!)。解释了here :

When first introduced, AsyncTasks were executed serially on a single background thread. Starting with DONUT, this was changed to a pool of threads allowing multiple tasks to operate in parallel. Starting with HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution.

If you truly want parallel execution, you can invoke executeOnExecutor(java.util.concurrent.Executor, Object[]) with THREAD_POOL_EXECUTOR.

考虑到这一点,可能是另一个 AsyncTask 正在您的应用程序中运行,从而阻止了这个任务的启动。这可以解释为什么它在您的 2.3.5 设备上运行良好,但在您的 4.0.4 平板电脑上运行良好。

关于android - Android 平板电脑中未调用 Asynctask DoInBackground (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12839384/

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