Asynctask错误处理

Leo*_*Leo 16 android exception-handling thread-safety android-asynctask

AsyncTask用来执行一些后台计算,但我无法找到正确的方法来处理异常.目前我使用以下代码:

private class MyTask extends AsyncTask<String, Void, String>
{
    private int e = 0;

    @Override
    protected String doInBackground(String... params)
    {
        try
        {
            URL url = new URL("http://www.example.com/");
        }
        catch (MalformedURLException e)
        {
            e = 1;
        }

        // Other code here...

        return null;
    }

    @Override
    protected void onPostExecute(String result)
    {
        if (e == 1)
            Log.i("Some Tag", "An error occurred.");

        // Perform post processing here...
    }
}
Run Code Online (Sandbox Code Playgroud)

我相信变量e可以由主线程和工作线程写入/访问.据我所知,onPostExecute()只有在doInBackround()完成后才会运行,我可以省略任何同步吗?

这是坏代码吗?是否有一个约定或正确的方法来处理异常AsyncTask

Mac*_*rse 3

我一直在我的应用程序中这样做,我想没有更好的方法。

您还可以阅读马克·墨菲对此的回答。