在android中的应用程序上工作我使用了Asynctask类,当我在运行2.3.5的Android设备上测试时工作正常,但我面临的问题是,同样不适用于我的平板电脑4.0.4
在测试时,知道正在调用 prexecute() 但未调用 doInbackground(),但是在设备 (2.3.5) 上调用了 doInbackground()。
我相信这个问题的原因之一是平板电脑的处理器比设备的处理器快得多,所以可能是一些线程问题,为什么,为了解决这个问题,我使用了一些标志,并使用了 Thread.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;
}
}