AsyncTask.doInBackground 在 2.3 上没有被调用,在 4.0+ 上工作

Posted

技术标签:

【中文标题】AsyncTask.doInBackground 在 2.3 上没有被调用,在 4.0+ 上工作【英文标题】:AsyncTask.doInBackground not getting called on 2.3, working on 4.0+ 【发布时间】:2014-02-15 10:47:09 【问题描述】:

我有这个 AsyncTask:

public static void login(final String email, final String password,
            final String token, final SocketHandler handler) 
        execute(new AsyncTask<Void, Void, Void>() 

            @Override
            protected Void doInBackground(final Void... params) 
                Log.d("ACEPTAR", "DOINBACKGROUND");
                String url = handler.servidor.getUrl();
                url += "/login-usuario";
                String str;
                try 
                    str = postResponseFromServer(url, "mail", email, "pass",
                            password, "tipo", "1", "token", token);
                    Log.d("ACEPTAR", str);
                    final CustomJSONObject object = new CustomJSONObject(str);
                    final CustomJSONObject object2 = new CustomJSONObject();
                    object2.put("datos", object);
                    final CustomJSONArray array = new CustomJSONArray();
                    array.put(object2);
                    handler.on("resultado-login", array);
                 catch (final Exception ex) 
                    ex.printStackTrace();
                    handler.on("error-login", new CustomJSONArray());
                
                return null;
            
        );
    

    @SuppressLint("InlinedApi")
    private static void execute(final AsyncTask<Void, Void, Void> task) 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
            task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
         else 
            task.execute();
        
    

我尝试在 3G 上进行,总是有效。然后我连接到 Wi-Fi。 AsyncTask 在 4.0+ 上被调用,但不是在 2.3.7-。

我错过了什么吗?

【问题讨论】:

从您发布的代码中,调用 doInBackground() 方法并不取决于您是否连接到 wifi 或移动数据。您可能想澄清您的问题 我知道,这就是让我发疯的原因 它总是可重现的吗?我的意思是,每次你通过wifi尝试它都会失败?您是否尝试过将 wifi 用于其他应用程序,例如网络浏览器?您是否尝试过在多个设备上查看是否所有设备都出现这种情况? 奇怪的是你执行你的 AsyncTask 在蜂窝后串行和在它之前并行。这可能是错误的一些来源,但我没有看到与 wifi 的链接...... @NKN 我明白你的意思,但我相信你没有注意到 santirivera92 的代码和文章本质上是不同的:santiriviera92 有一个相当于只调用 execute() 的实现。这篇文章有一个始终并行运行任务的实现。编写始终执行串行执行的实现需要使用您的自定义执行程序(Gingerbread 和 Honeycomb 之间不存在 SERIAL_EXECUTOR) 【参考方案1】:

尝试创建一个单独的线程并在那里做你的事情,使用 Activity.runInUiThread() 发布你的结果。看看有没有这样的问题。如果没有问题,那么可能是因为一些 AsyncTask 错误。

【讨论】:

以上是关于AsyncTask.doInBackground 在 2.3 上没有被调用,在 4.0+ 上工作的主要内容,如果未能解决你的问题,请参考以下文章

AsyncTask doInBackground方法未调用

AsyncTask.doInBackground 在 2.3 上没有被调用,在 4.0+ 上工作

AsyncTask.doInBackground - Android Scala 项目中的抽象方法未实现错误

AsyncTask doInBackground 返回数组列表

AsyncTask doInBackground 仅有时返回空指针异常

在 AsyncTask doInBackground() 中修改视图不会(总是)抛出异常