2012-04-24 4 views
0

서비스에서 일부 작업이 수행 된 후 UI (활동)를 업데이트하려고합니다. 이것은 매우 간단한 예이지만 그것은 나를 위해 작동하지 않습니다. 내가 여기서 무엇을 놓치고 있니?봉사 활동에 대한 커뮤니케이션

ExampleService :

public class ExampleService extends IntentService{ 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     notifyActivity(); 
    } 

    private void notifyActivity() { 
     Intent broadcast = new Intent(this, ExampleActivity.class); 
     sendBroadcast(broadcast); 
    } 
    } 

ExampleActivity : 당신은 익명의 동적 수신기에 그런 식으로 브로드 캐스트를 보낼 수 없습니다

public class ExampleActivity extends ListActivity { 
     private BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unregisterReceiver(receiver); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     IntentFilter filter = new IntentFilter(); 
     registerReceiver(receiver, filter); 
    } 
} 

답변

1

. Intent에 작업 문자열을 정의하고 IntentFilter에 해당 작업 문자열을 사용해야합니다.

더 나은 성능을 위해이 시나리오에서는 LocalBroadcastManager을 사용하는 것이 좋습니다. 이것을 보여주는 Here is a sample project.

+0

호환성 패키지에서 LocalBroadcastManager를 사용할 수 있습니까? 내가 다운로드 한 v4에서 찾을 수 없습니다. – karruma

+0

인 텐트의 액션 문자열에 관해서는 규칙이 있습니까? 아니면 'example.action.string'을 넣을 수 있습니까? – karruma

+0

@karruma : "LocalBroadcastManager가 호환성 패키지에서 사용 가능합니까?" -- 예. "Intents의 동작 문자열에 관해서는 규칙이 있습니까?"- LocalBroadcastManager의 경우 원하는대로 사용하십시오. "실제"브로드 캐스트의 경우 문자열이 고유하기를 원하므로 일반적으로 응용 프로그램의 패키지가 접두어로 사용됩니다. – CommonsWare