마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

url로 웹 데이터를 병렬로(비동기식) 받아오기

0 추천
public class main extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        web1("~~~"); web2("~~~");
    }

    private boolean is_network()
    {
        boolean available = false;
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if(networkInfo != null && networkInfo.isAvailable())
        {
            available = true;
        }
        return available;
    }

    private String downloadUrl(String strUrl) throws IOException
    {
        String s = null;
        byte[] buffer = new byte[1000];
        InputStream iStream = null;
        try
        {
            URL url = new URL(strUrl);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.connect();
            iStream = urlConnection.getInputStream();
            iStream.read(buffer);
            s = new String(buffer);
        }
        catch(Exception e)
        {
            Log.d("Exception while downloading url", e.toString());
        }
        finally
        {
            iStream.close();
        }
        return s;
    }

    private class web extends AsyncTask<String, Integer, String>
    {
        String s = null;

        @Override
        protected String doInBackground(String... url)
        {
            try
            {
                s = downloadUrl(url[0]);
            }
            catch(Exception e)
            {
                Log.d("Background Task", e.toString());
            }
            return s;
        }
        @Override
        protected void onPostExecute(String result)
        {
           ~~~
        }
    }

    void web1(String url)
    {
        if(is_network())
        {
            web WEB_web1 = new web();
            WEB_web1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url);
        }
    }
    void web2(String url)
    {
        if(is_network())
        {
            web WEB_web2 = new web();
            WEB_web2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url);
        }
    }
}

위 코드에서는 표현되어있지 않지만 웹 1개는 1~2초 내로 연결되는 url, 다른 1개는 long-polling 방식을 사용하는 url로 오랫동안 대기해야 합니다. 이때 long-polling 사이트를 기다리면서 동시에 1번째 사이트에 접속할 수 있도록 병렬 처리를 하고 싶습니다. 어떻게 해야할까요?

mmmmm5 (140 포인트) 님이 2015년 11월 6일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...