最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)使用Messenger及Handler進(jìn)行通信的方法示例

 更新時間:2017年12月13日 11:39:03   作者:LovooGod  
這篇文章主要介紹了Android開發(fā)使用Messenger及Handler進(jìn)行通信的方法,結(jié)合實例形式分析了Android使用Messenger及Handler定義客戶端與服務(wù)器端實現(xiàn)通信的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Android開發(fā)使用Messenger及Handler進(jìn)行通信的方法。分享給大家供大家參考,具體如下:

1. 客戶端service

public class MessageService extends Service {
 private static final int MSG_SET_VALUE = 0x110;
 private Handler mHandler = new Handler() {
  public void handleMessage(Message msgFromClient) {
   // 返回給客戶的信息
   Message msgToClient = Message.obtain(msgFromClient);
   switch (msgFromClient.what) {
   // msg 客戶端傳來的消息
   case MSG_SET_VALUE:
    try {
     msgToClient.what = MSG_SET_VALUE;
     SystemClock.sleep(2000);
     msgToClient.arg2 = msgFromClient.arg1 + msgFromClient.arg2;
     //msgFromClient.replyTo.send(msgToClient);
     //得到客戶端的信使對象,并向它發(fā)送消息
     cMessenger = msgFromClient.replyTo;
     cMessenger.send(msgToClient);
    } catch (RemoteException e) {
     e.printStackTrace();
    }
    break;
   default:
    break;
   }
  }
 };
 private Messenger mMessager = new Messenger(mHandler);
 private Messenger cMessenger;
 @Override
 public IBinder onBind(Intent intent) {
  return mMessager.getBinder();
 }
 @Override
 public void onDestroy() {
  cMessenger = null;
  super.onDestroy();
 }
}

2. 服務(wù)器端service

public class MessageService extends Service {
 private static final int MSG_SET_VALUE = 0x110;
 private Handler mHandler = new Handler() {
  public void handleMessage(Message msgFromClient) {
   // 返回給客戶的信息
   Message msgToClient = Message.obtain(msgFromClient);
   switch (msgFromClient.what) {
   // msg 客戶端傳來的消息
   case MSG_SET_VALUE:
    try {
     msgToClient.what = MSG_SET_VALUE;
     SystemClock.sleep(2000);
     msgToClient.arg2 = msgFromClient.arg1 + msgFromClient.arg2;
     //msgFromClient.replyTo.send(msgToClient);
     //得到客戶端的信使對象,并向它發(fā)送消息
     cMessenger = msgFromClient.replyTo;
     cMessenger.send(msgToClient);
    } catch (RemoteException e) {
     e.printStackTrace();
    }
    break;
   default:
    break;
   }
  }
 };
 private Messenger mMessager = new Messenger(mHandler);
 private Messenger cMessenger;
 @Override
 public IBinder onBind(Intent intent) {
  return mMessager.getBinder();
 }
 @Override
 public void onDestroy() {
  cMessenger = null;
  super.onDestroy();
 }
}

3. 客戶端使用

public class MainActivity extends Activity {
 private static final int MSG_SET_VALUE = 0x110;
 private TextView mTVStatus; // 連接狀態(tài)
 private LinearLayout mLLContainer;// 用來添加接收到服務(wù)器返回的信息
 private Messenger mService; // 客戶端信使
 private boolean isConnecting; // 是否連接
 private Handler mHandler = new Handler() {
  public void handleMessage(Message msgFromServer) {
   switch (msgFromServer.what) {
   case MSG_SET_VALUE:
    TextView tv = (TextView) findViewById(msgFromServer.arg1);
    tv.setText(tv.getText() + "==>" + msgFromServer.arg2);
    break;
   }
   super.handleMessage(msgFromServer);
  };
 };
 private Messenger mMessenger = new Messenger(mHandler);
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mTVStatus = (TextView) findViewById(R.id.tv_status);
  mLLContainer = (LinearLayout) findViewById(R.id.ll_container);
 }
 int i = 0;
 public void send(View view){
  try {
   int a = i++;
   int b = (int) (Math.random() * 100);
   //創(chuàng)建一個tv,添加到LinearLayout中
   TextView tv = new TextView(MainActivity.this);
   tv.setText(a + " + " + b + " = caculating ...");
   tv.setId(a);
   mLLContainer.addView(tv);
   Message msgFromClient = Message.obtain(null, MSG_SET_VALUE, a, b);
   msgFromClient.replyTo = mMessenger;
   if (isConnecting) {
    //往服務(wù)端發(fā)送消息
    mService.send(msgFromClient);
   }
  } catch (RemoteException e) {
   e.printStackTrace();
  }
 }
 public void bind(View view) {
  Intent service = new Intent();
  service.setAction("android.intent.action.MESSAGE_SERVER");
  bindService(service, conn, Context.BIND_AUTO_CREATE);
 }
 private ServiceConnection conn = new ServiceConnection() {
  @Override
  public void onServiceDisconnected(ComponentName name) {
   mService = null;
   isConnecting = false;
   mTVStatus.setText("已斷開連接!");
  }
  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
   mService = new Messenger(service);
   isConnecting = true;
   mTVStatus.setText("連接成功!");
  }
 };
 public void unbind(View view) {
  unbindService(conn);
  conn = null;
 }
 @Override
 protected void onDestroy() {
  unbindService(conn);
  conn = null;
  super.onDestroy();
 }
}

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android通信方式總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對大家Android程序設(shè)計有所幫助。

相關(guān)文章

  • SimpleCommand實現(xiàn)上傳文件或視頻功能(四)

    SimpleCommand實現(xiàn)上傳文件或視頻功能(四)

    這篇文章主要介紹了SimpleCommand實現(xiàn)上傳文件或視頻功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android Fragment監(jiān)聽返回鍵的一種合理方式

    Android Fragment監(jiān)聽返回鍵的一種合理方式

    這篇文章主要給大家介紹了關(guān)于Android Fragment監(jiān)聽返回鍵的一種合理方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Android自定義WaveView實現(xiàn)波浪進(jìn)度效果

    Android自定義WaveView實現(xiàn)波浪進(jìn)度效果

    最近注意到百度外賣以及淘寶個人中心,都用到了類似水波起伏的效果,于是就參照網(wǎng)上的資料然后自己整改,自定義了一個waveView來實現(xiàn)這個效果,文中給出來詳細(xì)的實現(xiàn)原理及實例代碼,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Android互聯(lián)網(wǎng)訪問圖片并在客戶端顯示的方法

    Android互聯(lián)網(wǎng)訪問圖片并在客戶端顯示的方法

    這篇文章主要介紹了Android互聯(lián)網(wǎng)訪問圖片并在客戶端顯示的方法,結(jié)合實例分析了Android處理圖片的技巧,并附帶了Android的URL封裝類,網(wǎng)絡(luò)連接封裝類與輸出流封裝類,需要的朋友可以參考下
    2015-12-12
  • android 識別U盤以及讀寫文件的方法

    android 識別U盤以及讀寫文件的方法

    今天小編就為大家分享一篇android 識別U盤以及讀寫文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Android ListView詳解

    Android ListView詳解

    listview控件在項目開發(fā)過程中經(jīng)常會用到,本文給大家分享android listview相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android使用fastjson庫解析json字符串實戰(zhàn)

    Android使用fastjson庫解析json字符串實戰(zhàn)

    fastjson是一個Java語言編寫的高性能功能完善的JSON庫,它采用一種“假定有序快速匹配”的算法,把JSON?Parse的性能提升到極致,是目前Java語言中最快的JSON庫,Fastjson接口簡單易用,已經(jīng)被廣泛使用在緩存序列化、協(xié)議交互、Web輸出、Android客戶端等多種應(yīng)用場景
    2023-11-11
  • Android Tablayout 自定義Tab布局的使用案例

    Android Tablayout 自定義Tab布局的使用案例

    這篇文章主要介紹了Android Tablayout 自定義Tab布局的使用案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Android Studio升級3.6 Build窗口出現(xiàn)中文亂碼問題解決方法

    Android Studio升級3.6 Build窗口出現(xiàn)中文亂碼問題解決方法

    這篇文章主要介紹了Android Studio升級3.6 Build窗口出現(xiàn)中文亂碼問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論

德昌县| 大宁县| 北票市| 密云县| 治多县| 交城县| 泾川县| 民乐县| 淅川县| 西盟| 陕西省| 阜南县| 南澳县| 泸水县| 加查县| 日喀则市| 佳木斯市| 阿拉尔市| 昌黎县| 江永县| 囊谦县| 龙川县| 平乡县| 奉贤区| 剑阁县| 留坝县| 乌鲁木齐县| 浏阳市| 邛崃市| 安福县| 大悟县| 米易县| 安图县| 即墨市| 梨树县| 遂昌县| 诏安县| 上虞市| 汾阳市| 耒阳市| 侯马市|