doInBackground有时不会被称为Android
在我的应用程序中,有多个异步任务。请告诉我为什么异步任务的后台有时不会被调用。它的onPreExecute方法被调用。由于多个异步任务或其他原因是否存在任何问题doInBackground有时不会被称为Android,android,android-asynctask,Android,Android Asynctask,在我的应用程序中,有多个异步任务。请告诉我为什么异步任务的后台有时不会被调用。它的onPreExecute方法被调用。由于多个异步任务或其他原因是否存在任何问题 /* ASync class for test table */ public class TestAsynch extends AsyncTask<String, Void, String>{ protected void onPreExecute() { super.onPr
/* ASync class for test table */
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) {
}
}
测试表的异步类*/
公共类TestAsynch扩展了异步任务{
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串状态=空;
字符串result1=API_Manager.getInstance().sendTestData(用户名);
试一试{
如果(result1!=null){
//保存在数据库中
}
}
}
捕获(例外e){
e、 printStackTrace();
}
返回状态;
}
@凌驾
受保护的void onPostExecute(字符串状态){
}
}
在UI线程上调用OnPreExecute(),在后台线程上调用doInBackground()
异步任务有一个专用的后台线程。如果您愿意,可以更改此行为
现在,假设您有多个异步任务实例,我假设您正在调用execute()来运行异步任务。这将立即触发所有预执行,因为UI线程是空闲的,但对于doInBackground,它将逐个触发。因此,启动下一个异步任务可能需要一些时间。doInBackground应该在循环上运行,在执行之前使用布尔值进行检查。在执行任务之前,设置一个全局布尔值(可能为真/假),这取决于您喜欢的值和附加线程应该调用的runOnUiThread
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) {
}
}
公共类TestAsynch扩展了异步任务{
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串状态=空;
字符串result1=API_Manager.getInstance().sendTestData(用户名);
试一试{
如果(result1!=null){
//保存在数据库中
}
}
}
捕获(例外e){
e、 printStackTrace();
}
返回状态;
}
@凌驾
受保护的void onPostExecute(字符串状态){
}
}
对此
public class TestAsynch extends AsyncTask<String, Void, String> {
String result1 = null;
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String status = null;
result1=API_Manager.getInstance().sendTestData(userName);
while (startExecute) {
Thread exe = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5);
}
catch( Exception e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
if(result1 != null) {
// save in db
}
}
});
}
}); exe.start();
}
return status;
}
@Override
protected void onPostExecute(String status) {
}
}
公共类TestAsynch扩展了异步任务{
字符串result1=null;
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串状态=空;
result1=API_Manager.getInstance().sendTestData(用户名);
while(startExecute){
线程exe=新线程(新可运行(){
@凌驾
公开募捐{
试一试{
睡眠(5);
}
捕获(例外e){
e、 printStackTrace();
}
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(result1!=null){
//保存在数据库中
}
}
});
}
});exe.start();
}
返回状态;
}
@凌驾
受保护的void onPostExecute(字符串状态){
}
}
如果项目有多个异步任务,则必须检查可执行的异步任务是否有限制。创建新的AsyncTask时,它将添加到池中,并且仅在可能的情况下执行。
检查以下答案:
文件:
下面是一个如何正确处理多个异步任务的示例代码在哪里?非常有用。能否请您提供一个示例,说明如何实现这一点,即如何限制调用asynctasks。如果确实需要太多AsyncTak,则需要更改池大小。以下是一个例子: