2013-01-21 74 views
0

我有服務和活動。我正在發送消息。 我想抓住它的主要活動。但是消息並沒有達到活動中的處理者。發送消息未到達活動中的處理程序

請參閱下面的代碼。

服務:

Handler handler = new Handler(Looper.getMainLooper()); 
    handler.sendEmptyMessage(112345); 

MainActivity:

handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      Toast.makeText(MainActivity.this, "handled message successfully", Toast.LENGTH_SHORT).show(); 
      if (msg.what == 1234) { 
       Toast.makeText(MainActivity.this, "handled message successfully", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

誰能告訴我,爲什麼它沒有達到活動中的處理程序。 據我所知

+0

不要在同一個進程中運行的服務和活動? –

+0

另外,活動的代碼片段是否在主UI線程上運行? –

回答

0

所有使用Handler.sendMessageXXX發送的消息都將由同一個Handler對象處理。所以你必須通過HandlerActivityService。可以使用Messenger類來完成。

活動:

public class MyActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       Toast.makeText(MyActivity.this, "handleMessage " + msg.what, Toast.LENGTH_SHORT).show(); 
      } 
     }; 

     final Intent intent = new Intent(this, MyService.class); 
     final Messenger messenger = new Messenger(handler); 

     intent.putExtra("messenger", messenger); 
     startService(intent); 
    } 
} 

服務:

public class MyService extends IntentService { 
    public MyService() { 
     super(""); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     final Messenger messenger = (Messenger) intent.getParcelableExtra("messenger"); 
     final Message message = Message.obtain(null, 1234); 


     try { 
      messenger.send(message); 
     } catch (RemoteException exception) { 
      exception.printStackTrace(); 
     } 
    } 
} 
+0

真棒解釋非常感謝你。 –

相關問題