当前位置: 首页 > news >正文

石家庄网站建设推广报价网页视频下载软件免费版

石家庄网站建设推广报价,网页视频下载软件免费版,门户网站内容维护流程,关键词挖掘爱站网本文转自#xff1a;http://xwangly.iteye.com/blog/1109424 Messenger:信使 官方文档解释#xff1a;它引用了一个Handler对象#xff0c;以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message的通信(即两个进程间可以通过Mess…本文转自http://xwangly.iteye.com/blog/1109424   Messenger:信使 官方文档解释它引用了一个Handler对象以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message的通信(即两个进程间可以通过Message进行通信)在服务端使用Handler创建一个Messenger客户端持有这个Messenger就可以与服务端通信了。   以前我们使用HandlerMessage的方式进行通信都是在同一个进程中从线程持有一个主线程的Handler对象并向主线程发送消息。 而Android既然可以使用bindler机制进行跨进行通信所以我们当然可以将Handler与bindler结合起来进行跨进程发送消息。 查看API就可以发现Messenger就是这种方式的实现。 一般使用方法如下 。远程通过   Java代码   mMessenger  new Messenger(mHandler)    mMessenger new Messenger(mHandler)  创建一个信使对象 。客户端使用bindlerService请求连接远程 。远程onBind方法返回一个bindler   Java代码   return mMessenger.getBinder();    return mMessenger.getBinder();  4.客户端使用远程返回的bindler得到一个信使即得到远程信使   Java代码               public void onServiceConnected(ComponentName name, IBinder service) {                   rMessenger  new Messenger(service);           ......               }     public void onServiceConnected(ComponentName name, IBinder service) {rMessenger new Messenger(service);......}  这里虽然是new了一个Messenger但我们查看它的实现   Java代码   /**   * Create a Messenger from a raw IBinder, which had previously been   * retrieved with {link #getBinder}.   *    * param target The IBinder this Messenger should communicate with.   */  public Messenger(IBinder target) {       mTarget  IMessenger.Stub.asInterface(target);   }     /*** Create a Messenger from a raw IBinder, which had previously been* retrieved with {link #getBinder}.* * param target The IBinder this Messenger should communicate with.*/public Messenger(IBinder target) {mTarget IMessenger.Stub.asInterface(target);}  发现它的mTarget是通过Aidl得到的实际上就是远程创建的那个。 。客户端可以使用这个远程信使对象向远程发送消息rMessenger.send(msg); 这样远程服务端的Handler对象就能收到消息了然后可以在其handlerMessage(Message msg)方法中进行处理。该Handler对象就是第一步服务端创建Messenger时使用的参数mHandler.   经过这个步骤貌似只有客户端向服务端发送消息这样的消息传递是单向的那么如何实现双向传递呢 首先需要在第步稍加修改在send(msg)前通过msm.replyTo mMessenger将自己的信使设置到消息中这样服务端接收到消息时同时也得到了客户端的信使对象了然后服务端可以通过   Java代码   //得到客户端的信使对象并向它发送消息   cMessenger  msg.replyTo;   cMessenger.send(message);    //得到客户端的信使对象并向它发送消息 cMessenger msg.replyTo; cMessenger.send(message);  即完成了从服务端向客户端发送消息的功能这样客服端可以在自己的Handler对象的handlerMessage方法中接收服务端发送来的message进行处理。 双向通信宣告完成。   下面改写ApiDemos工程实现Messenger通信 MessengerService.java   Java代码   package com.xwangly.apidemo.app;     import java.util.Random;     import android.app.Service;   import android.content.Intent;   import android.os.Handler;   import android.os.IBinder;   import android.os.Message;   import android.os.Messenger;   import android.os.RemoteException;   import android.util.Log;     public class MessengerService extends Service {       private String TAG  MessengerService;         Override      public void onDestroy() {           // TODO Auto-generated method stub           Log.i(TAG, onDestroy);           cMessenger  null;           super.onDestroy();       }         Override      public boolean onUnbind(Intent intent) {           // TODO Auto-generated method stub           Log.i(TAG, onUnbind);           return super.onUnbind(intent);       }         static final int MSG_REGISTER_CLIENT  1;       static final int MSG_UNREGISTER_CLIENT  2;       static final int MSG_SET_VALUE  3;         private Random random  new Random();         private Handler mHandler  new Handler() {             Override          public void handleMessage(Message msg) {               // TODO Auto-generated method stub               Log.i(TAG, handleMessage);               switch (msg.what) {               case MSG_SET_VALUE:                   try {                       Message message  Message.obtain(null,                               MessengerService.MSG_SET_VALUE);                       message.arg1  random.nextInt(100);                                              //得到客户端的信使对象并向它发送消息                       cMessenger  msg.replyTo;                       cMessenger.send(message);                   } catch (RemoteException e) {                       // TODO Auto-generated catch block                       e.printStackTrace();                   }                   break;               default:                   super.handleMessage(msg);               }             }       };         /**       * 自己的信使对象       */      private Messenger mMessenger  new Messenger(mHandler);         /**       * 客户的信使       */      private Messenger cMessenger;         Override      public IBinder onBind(Intent intent) {           // TODO Auto-generated method stub           Log.i(TAG, onBind);           //返回自己信使的bindler,以供客户端通过这个bindler得到服务端的信使对象通过new Messenger(bindler)           return mMessenger.getBinder();       }         Override      public void onRebind(Intent intent) {           // TODO Auto-generated method stub           Log.i(TAG, onRebind);         }     }    package com.xwangly.apidemo.app;import java.util.Random;import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.util.Log;public class MessengerService extends Service {private String TAG MessengerService;Overridepublic void onDestroy() {// TODO Auto-generated method stubLog.i(TAG, onDestroy);cMessenger null;super.onDestroy();}Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubLog.i(TAG, onUnbind);return super.onUnbind(intent);}static final int MSG_REGISTER_CLIENT 1;static final int MSG_UNREGISTER_CLIENT 2;static final int MSG_SET_VALUE 3;private Random random new Random();private Handler mHandler new Handler() {Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubLog.i(TAG, handleMessage);switch (msg.what) {case MSG_SET_VALUE:try {Message message Message.obtain(null,MessengerService.MSG_SET_VALUE);message.arg1 random.nextInt(100);//得到客户端的信使对象并向它发送消息cMessenger msg.replyTo;cMessenger.send(message);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}break;default:super.handleMessage(msg);}}};/*** 自己的信使对象*/private Messenger mMessenger new Messenger(mHandler);/*** 客户的信使*/private Messenger cMessenger;Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.i(TAG, onBind);//返回自己信使的bindler,以供客户端通过这个bindler得到服务端的信使对象通过new Messenger(bindler)return mMessenger.getBinder();}Overridepublic void onRebind(Intent intent) {// TODO Auto-generated method stubLog.i(TAG, onRebind);}}MessengerServiceActivities.java   Java代码   package com.xwangly.apidemo.app;     import com.xwangly.apidemo.R;     import android.app.Activity;   import android.content.ComponentName;   import android.content.Intent;   import android.content.ServiceConnection;   import android.os.Bundle;   import android.os.Handler;   import android.os.IBinder;   import android.os.Message;   import android.os.Messenger;   import android.os.RemoteException;   import android.util.Log;   import android.view.View;   import android.widget.TextView;     public class MessengerServiceActivities {       public static class Binding extends Activity implements              View.OnClickListener {           private String TAG  Binding;             TextView mCallbackText;             private boolean isBound;             Override          protected void onCreate(Bundle savedInstanceState) {               // TODO Auto-generated method stub               super.onCreate(savedInstanceState);               setContentView(R.layout.messenger_service_binding);               findViewById(R.id.bind).setOnClickListener(this);               findViewById(R.id.unbind).setOnClickListener(this);                 mCallbackText  (TextView) findViewById(R.id.callback);               mCallbackText.setText(Not attached.);             }             private Handler mHandler  new Handler() {               Override              public void handleMessage(Message msg) {                   Log.i(TAG, handleMessage);                   switch (msg.what) {                   case MessengerService.MSG_SET_VALUE:                       mCallbackText.setText(Received from service:   msg.arg1);                       break;                   default:                       super.handleMessage(msg);                   }               }           };             /**           * 自己的信使           */          private Messenger mMessenger;                      /**           * 远程服务的信使           */          private Messenger rMessenger;                      private ServiceConnection connection  new ServiceConnection() {                 public void onServiceConnected(ComponentName name, IBinder service) {                   // TODO Auto-generated method stub                   Log.i(TAG, onServiceConnected);                   rMessenger  new Messenger(service);                   mMessenger  new Messenger(mHandler);                                      sendMessage();               }                   public void onServiceDisconnected(ComponentName name) {                   // TODO Auto-generated method stub                   rMessenger  null;               }           };             public void onClick(View v) {               // TODO Auto-generated method stub               Intent intent  new Intent(                       com.xwangly.apidemo.app.messenger_service);               switch (v.getId()) {               case R.id.bind:                   if (!isBound) {                       isBound  bindService(intent, connection, BIND_AUTO_CREATE);                       //isBound  true;                   }else {                       sendMessage();                   }                   break;               case R.id.unbind:                   if (isBound) {                       unbindService(connection);                       isBound  false;                   }                   break;               default:                   break;               }           }                      /**           * 使用服务端的信使向它发送一个消息。           */          private void sendMessage() {               // TODO Auto-generated method stub               Message message  Message.obtain(null, MessengerService.MSG_SET_VALUE);               message.replyTo  mMessenger;               try {                   rMessenger.send(message);               } catch (RemoteException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();               }           }         }     }    package com.xwangly.apidemo.app;import com.xwangly.apidemo.R;import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.widget.TextView;public class MessengerServiceActivities {public static class Binding extends Activity implementsView.OnClickListener {private String TAG Binding;TextView mCallbackText;private boolean isBound;Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.messenger_service_binding);findViewById(R.id.bind).setOnClickListener(this);findViewById(R.id.unbind).setOnClickListener(this);mCallbackText (TextView) findViewById(R.id.callback);mCallbackText.setText(Not attached.);}private Handler mHandler new Handler() {Overridepublic void handleMessage(Message msg) {Log.i(TAG, handleMessage);switch (msg.what) {case MessengerService.MSG_SET_VALUE:mCallbackText.setText(Received from service: msg.arg1);break;default:super.handleMessage(msg);}}};/*** 自己的信使*/private Messenger mMessenger;/*** 远程服务的信使*/private Messenger rMessenger;private ServiceConnection connection new ServiceConnection() {public void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubLog.i(TAG, onServiceConnected);rMessenger new Messenger(service);mMessenger new Messenger(mHandler);sendMessage();}public void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubrMessenger null;}};public void onClick(View v) {// TODO Auto-generated method stubIntent intent new Intent(com.xwangly.apidemo.app.messenger_service);switch (v.getId()) {case R.id.bind:if (!isBound) {isBound bindService(intent, connection, BIND_AUTO_CREATE);//isBound true;}else {sendMessage();}break;case R.id.unbind:if (isBound) {unbindService(connection);isBound false;}break;default:break;}}/*** 使用服务端的信使向它发送一个消息。*/private void sendMessage() {// TODO Auto-generated method stubMessage message Message.obtain(null, MessengerService.MSG_SET_VALUE);message.replyTo mMessenger;try {rMessenger.send(message);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}AndroidManifest.xml相关配置如下   Xml代码   service android:name.app.MessengerService       intent-filter          action android:namecom.xwangly.apidemo.app.messenger_service /      /intent-filter  /service        activity android:name.app.MessengerServiceActivities$Binding                android:labelstring/activity_messenger_service_binding                android:launchModesingleTop            intent-filter                action android:nameandroid.intent.action.MAIN /                category android:nameandroid.intent.category.LAUNCHER /            /intent-filter        /activity     service android:name.app.MessengerService intent-filteraction android:namecom.xwangly.apidemo.app.messenger_service //intent-filter/serviceactivity android:name.app.MessengerServiceActivities$Bindingandroid:labelstring/activity_messenger_service_bindingandroid:launchModesingleTopintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter/activity  至于layout就不帖了两个按钮一个文本域。  转载于:https://www.cnblogs.com/freeliver54/archive/2011/12/27/2303790.html
http://www.yutouwan.com/news/122447/

相关文章:

  • 做企业网站用哪个cms百度知道入口
  • 可以做淘宝推广的网站吗电脑没有网怎么升级wordpress
  • 合肥做网站哪家公司好sem优化方法
  • 济南学网站建设哪里好手机网站 做成app
  • 免费试用网站 源码奉贤北京网站建设
  • 做旅游网站的目的和意义网站建设的图片怎么加水印
  • 郑州网站建设需要多少钱农林牧渔行业网站建设
  • 深圳网站建设 骏域网站建设建设工程教育官方网站
  • 做网站建设 个体经营 小微企业平谷网站建设公司
  • 网站排名按天付费互联网it行业做什么的
  • 试玩平台类网站怎么做的用户网站建设
  • 营销型网站建设价格是多少东莞网站建设公司百推
  • seog太原百度seo网站建设
  • 关于网站建设请示百度做网站教程
  • 为什么我自己做的网站搜索不到网站建设365
  • cookie做网站登录外贸出口流程12步骤图
  • 网站 文件服务器搜题公众号怎么制作
  • 旅游网站前端模板可克达拉市建设局网站
  • html网站开发代码自建网站做外贸
  • 电子商务网站建设 精品课程中国小型加工厂网
  • 广西建设网官网住房和城乡厅官网官方网百度优化大师
  • 网站推广连接怎么做的电商平台营销方案
  • 做网站大概什么价位滴滴推广联盟
  • 品牌形象网站源码网页设计作业欣赏
  • wordpress如何添加链接菜单长沙关键词优化推荐
  • 福州企业网站建设哪家好大连零基础网站建设教学在哪里
  • 万江建筑培训中心重庆seo代理价格
  • 外贸网站建设 推广北京装饰装修公司
  • 建企业版网站多久图库网站模板
  • 湘潭网站建设优化建站专业建设网站制作