2012-12-18 5 views
0

내 활동에 처리기를 만들었습니다. 핸들러는 응용 프로그램 개체에 저장됩니다.내 활동에서 처리기가 호출되지 않습니다.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.action_activity); 
    appData = (AttachApplication) getApplication(); 

    Handler updateHandler = new Handler() { 
     public void handlerMessage(Message msg) { 
      Log.d(TAG, "handle message "); 
     } 
    }; 
    appData.setUpdateHandler(updateHandler); 


} 

나의 계획은 내가 내 서비스에 setEmtpyMessage 때이 handleMessage를 호출 할 것입니다. 서비스는 응용 프로그램 개체에서 처리기를 검색합니다.

public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d(TAG, "onStartCommand of attachService"); 
    List<Job> jobList = DBManager.getInstance().getAllOpenJobs(); 
    appData = (AttachApplication) getApplication(); 
    updateHandler = appData.getUpdateHandler(); 
      updateHandler.sendEmptyMessage(101); 

로그를 확인했지만 처리 메시지가 없어 내 계획이 작동하지 않는 것으로 보입니다. 내 서비스가 그 일을 할 때마다 텍스트 필드를 업데이트하고 싶습니다. 귀하의 경우에는

답변

0

이 같은 브로드 캐스트 리시버 사용 shoild :

를 액티비티 클래스에 수신기를 정의

DataUpdateReceiver dataUpdateReceiver = new DataUpdateReceiver(); 
IntentFilter intentFilter = new IntentFilter(MainService.REFRESH_DATA_INTENT); 
registerReceiver(dataUpdateReceiver, intentFilter); 

:

public class DataUpdateReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(MainService.REFRESH_DATA_INTENT)) { 
         //do something 
     } 
    } 
} 

당신의에서 onCreate 또는 ONSTART 방법에 당신이 수신기를 등록해야합니다 서비스에 다음을 추가하십시오.

public static final String REFRESH_DATA_INTENT = "done"; 

당신은 당신이이 같은 brocast 전송해야하는 모든 직원이 완료되면 :

sendBroadcast(new Intent(MainService.REFRESH_DATA_INTENT)); 
+0

감사합니다. 정말 도움이되었습니다.보기에서 다시 몇 가지 작업을 수행하고 내 textfields를 업데이트 할 수 있습니다. –

0

귀하의 코드가 public void handlerMessage(Message msg)을 말한다, 그러나 나는 r없이, 당신은 public void handleMessage(Message msg)을 의미 생각합니다. 수퍼 클래스에서 메서드를 재정의 할 때 @Override 태그를 사용하면 이러한 문제를 피할 수 있습니다. 따라서 스 니펫은 @Override public void handleMessage(Message msg)으로 렌더링되지만 @Override public void handlerMessage(Message msg)은 오류가됩니다.

0

무엇을하려하십니까? Activity에서 Handler를 인스턴스화하는 지점을 실제로 보지 못합니다. MessageQueue에서 Message를 가져 오는 것뿐입니다. 안드로이드가 게시하는 메시지를 바보 취급하고 싶지는 않으며 활동에 메시지를 보내는 더 좋은 방법이 있습니다.

물론 AttachApplication 코드는 포함하지 않으므로 추측 할 수만 있습니다.

또한 서비스에서이 핸들러에 액세스하려고합니다. 무언가가 진행되고 있지만 무엇이 확실하지 않습니다.

서비스가 작동 할 때마다 TextView를 업데이트하려면 서비스에서 방송 인 텐트를 활동으로 보내고 활동에 브로드 캐스트 수신기를 사용하십시오. 또한 서비스 대신 IntentService 사용을 고려해야합니다.

관련 문제