在我的应用程序中,有多个asynctasks。请让我知道为什么doInBackground的asynctask 有时没有被调用。它的onPreExecute方法被调用。是否有任何问题,因为有多个asynctasks或其他东西?
log4j.rootLogger=INFO, stdout1, proj1, proj2
答案 0 :(得分:1)
如果您的项目有多个asynctasks,您必须检查是否存在可以执行的asynctasks限制。当您创建新的AsyncTask时,它将被添加到池中,并且只有在可能的情况下才会执行。 检查这个答案: Multitasking on android 文档:ThreadPoolExecutor
以下是有关如何正确处理多个AsyncTasks AsyncTaskManager
的示例答案 1 :(得分:0)
在UI线程上调用OnPreExecute(),并在后台线程上调用doInBackground()。
异步任务有一个专用的后台线程。如果您愿意,可以更改此行为。
http://android-er.blogspot.in/2014/04/run-multi-asynctask-as-same-time.html
现在,假设您有多个异步任务实例,我假设您正在调用execute()来运行异步任务。这将立即触发所有preExecute,因为UI线程是空闲的,但对于doInBackground,它将逐个触发。因此,下一个异步任务可能需要一些时间才能启动。
答案 2 :(得分:0)
doInBackground应该在循环上运行,使用布尔值在执行前进行检查。在执行Task之前,设置一个全局布尔值(可能是true / false)取决于你喜欢哪个,并且在线程上添加的值应该调用runOnUiThread。
var f = pdfReader.IsOpenedWithFullPermissions; -> FALSE
var f1 = pdfReader.IsEncrypted(); - > FALSE
var f2 = pdfReader.ComputeUserPassword(); - > NULL
var f3 = pdfReader.Is128Key(); - > FALSE
var f4 = pdfReader.HasUsageRights();
然后改变这个
startExect = true;
new TestAsynch().execute();
到这个
public class TestAsynch extends AsyncTask<String, Void, String>{
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String status = null;
String result1=API_Manager.getInstance().sendTestData(userName);
try {
if(result1 != null) {
// save in db
}
}
}
catch( Exception e) {
e.printStackTrace();
}
return status;
}
@Override
protected void onPostExecute(String status) {
}
}