2013-02-28 4 views
0

서비스를 시작하고 바인딩하는 활동이 있습니다. 서비스는 일부 HttpPost를 사용하여 AsyncTask를 수행하고 수신 된 데이터를 처리하여 결과에서 일부 변수를 가져옵니다. 서비스가 HttpPost에서 가져 오는 즉시 해당 데이터로 활동의 UI를 업데이트하려면 어떻게해야합니까? ResultReceiver를 사용해야합니까 아니면 더 좋은 방법이 있습니까?서비스에서 AsyncTask가받은 데이터로 UI 업데이트

업데이트 :

나는 내가 브로드 캐스트 리시버 또는 감시 객체를 사용합니다 생각합니다.

+0

바인딩 된 경우 데이터를 다시 액티비티로 보낼 수 있습니다. – njzk2

+0

AsyncTask 내에서 인터페이스를 업데이트해야합니다. 나는 본드를 사용할 수 있다고 생각하지 않습니까? – Nifhel

답변

1

몇 가지 possibilites 있습니다

귀하의 서비스에의 브로드 캐스트 (sendBroadcast)와 활동을 보낼 수 있습니다 단지 따라 broacastReceiver를 등록 할 필요가 당신의 서비스에 구현했습니다. 뭐 그런 : 서비스 : 응용 프로그램의 당신의 AndroidManifest를에

Intent intent = new Intent(); 
intent.setAction("youAction");  
intent.putExtra("url",uri.toString()); 
sendBroadcast(intent); 

:

<receiver android:name="MyReceiver" > 
    <intent-filter> 
      <action android:name="yourAction" /> 
    </intent-filter> 
</receiver> 

귀하의 활동 :

private class Receiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 

     String url = arg1.getExtras().getString("url"); 
     //Here you can update your UI 
    } 

이 링크를 힐로 수 있습니다 http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html

두 번째 방법은 서비스에 리스너를 등록하는 것입니다. 그 청취자에게 귀하의 서비스에 대해 통지하십시오. 서비스에서

:

그러나
void onSomethingHappened() 
{ 
     activityListener.notifyProgressBar(); 
} 

void subscribe(YourInterface listener) 
{ 
     actibityListener = listener; 
} 
In you activity, after start you service: 

service.subscribe(this); 

, 당신은 계정으로 서비스 구현 (유형)을 수행해야하는 더 나은 솔루션을 촬영합니다.

AndroidService 링크가 유용 할 수 있습니다.

그러나 또 다른 중요한 점은 선택 항목 이 비동기 작업의 구현 방식에 따라 달라진다는 것입니다. 각 메소드, preExucute, doInBackground, onProgressUpdate 및 postExecute에서 수행하는 작업에 따라 다릅니다.

AndroidUIThread 외부에서 발생하는 이벤트에서 UI를 업데이트해야하므로 UI를 직접 업데이트하려고하면 문제가 발생합니다. 이 문제를 해결하려면 runOnUiThread 메서드를 사용할 수 있습니다. Handler을 사용할 수 있습니다.

0

doInBackground()에서 데이터를 다운로드하십시오. onpreExecute()에 진행률 대화 상자를 표시합니다. onPostExecute()에서 대화 상자를 닫습니다. onPostExecute()의 데이터로 UI를 업데이트합니다.

관련 문제