有可能因为某种原因,Android操作系统可能会延迟或暂停我的asynctask。如果是这样,我该怎么做才能确保我的任务(例如从数据库中获取数据)不会延迟或暂停。可能在UI线程上运行它,但我已经读过它不是一个好主意,因为它可以冻结UI并导致滞后。
答案 0 :(得分:2)
有可能因为某种原因,Android操作系统可能会延迟或暂停我的asynctask。
它可能被另一个AsyncTask
实例阻止。默认情况下,它们在单个后台线程上运行:https://developer.android.com/reference/android/os/AsyncTask.html
如果是这样,我该怎么做才能确保我的任务(例如从数据库中提取数据)不会延迟或暂停。
调查导致延迟的原因。它是doInBackground
方法中的内容还是在后台操作之前或之后发生延迟。它可以是任何东西,没有调试代码很难说。
在UI线程上运行它可能但我已经读过它不是一个好主意,因为它可以冻结UI并导致滞后。
虽然AsyncTask
在这种情况下不是一个好的解决方案,但如果你正确实现它应该可以正常工作。其他需要考虑的方法是Loader
,或AsyncQueryHandler
与ContentProvider
。取决于您的用例。
答案 1 :(得分:0)
@覆盖 protected void onPreExecute(){ holdWait = false; stop = false; }
@Override
protected Void doInBackground(Void... params) {
synchronized (this) {
while(true) {
if(Work) return null;
if(HaveWork) {
//make some
} else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
public void mynotify() {
synchronized (this) {
if(holdWait) {
notify();
holdWait = false;
}
}
}
public void setStopWork() {
synchronized (this) {
stop= false;
if(holdWait) {
notify();
holdWait = false;
}
}
}
}