2013-01-21 45 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

真棒解释非常感谢你。 –

相关问题