Service

1、跨進(jìn)程Messager 多應(yīng)用間單線(xiàn)程

把Messenger比喻為一個(gè)信使,信使的作用是派信;那么Message就比喻為信件、信封,即信使派的東西;那么Bundle是什么呢?Message里面保存了Bundle,那么bundle可以比喻為信紙,信紙上寫(xiě)滿(mǎn)了各種我們要傳遞的信息。讀到這里,讀者應(yīng)該明白了這三者在Messenger通訊方式內(nèi)所扮演的角色了。簡(jiǎn)單來(lái)說(shuō):Messenger把裝有Bundle的Message發(fā)送到別的進(jìn)程。
###客戶(hù)端
private Messenger clientMessenger = new Messenger(handler);
private Handler handler = new Handler(Looper.getMainLooper()){
    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        Bundle bundle = msg.getData();
        Log.i(TAG,"收到遠(yuǎn)程服務(wù)數(shù)據(jù):"+bundle.getString("service"));
    }
};

private void bindRemoteService(){
    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.example.xxx",
            "com.example.xxx.MessengerService"));
    boolean isBind = bindService(intent,conn, Service.BIND_AUTO_CREATE);
    Log.i(TAG,"bindRemoteService isBind="+isBind);
}
private Messenger messengerProxy;
ServiceConnection conn = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder iBinder) {
        Log.i(TAG,"onServiceConnected:");
        messengerProxy = new Messenger(iBinder);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.i(TAG,"onServiceDisconnected:");
    }
};

private void sendData(){
    if (messengerProxy == null) return;
    Message message = new Message();
    message.replyTo = clientMessenger;
    Bundle bundle = new Bundle();
    bundle.putString("client","這是客戶(hù)端發(fā)送數(shù)據(jù):"+messageid);
    message.setData(bundle);
    messengerProxy.send(message);
   }

###服務(wù)端
//創(chuàng)建服務(wù)端Messenger
private final Messenger mMessenger = new Messenger(messengerHandler);

@Override
public IBinder onBind(Intent intent) {
    //向客戶(hù)端返回IBinder對(duì)象,客戶(hù)端利用該對(duì)象訪(fǎng)問(wèn)服務(wù)端
    return mMessenger.getBinder();
}
  //拿到客戶(hù)端的message 發(fā)送消息     
  private  Handler messengerHandler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        //取出客戶(hù)端的消息內(nèi)容
        Bundle bundle = msg.getData();
        String clientMsg = bundle.getString("client");
        Log.i(TAG, "來(lái)自客戶(hù)端的消息:" + clientMsg);
        //新建一個(gè)Message對(duì)象,作為回復(fù)客戶(hù)端的對(duì)象
        Message message = Message.obtain();
        Bundle bundle1 = new Bundle();
        bundle1.putString("service", clientMsg+",服務(wù)端收到");
        message.setData(bundle1);
        try {
            msg.replyTo.send(message);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
};  

2、AIDL 多應(yīng)用間多線(xiàn)程


參數(shù)定向tag

image.png
image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 只有 Activity、服務(wù)和內(nèi)容提供程序可以綁定到服務(wù) — 您無(wú)法從廣播接收器綁定到服務(wù)。 1:Service和...
    夏廣成閱讀 686評(píng)論 0 0
  • 本篇文章是繼續(xù)上篇android圖片壓縮上傳系列-基礎(chǔ)篇文章的續(xù)篇。主要目的是:通過(guò)Service來(lái)執(zhí)行圖片壓縮任...
    laogui閱讀 4,505評(píng)論 5 62
  • 概要:介紹綁定服務(wù)端的三種方式:同一進(jìn)程綁定服務(wù)、跨進(jìn)程綁定服務(wù)(Messenger)、跨進(jìn)程綁定服務(wù)(aidl)...
    aimaile閱讀 1,123評(píng)論 2 1
  • 【Android Service】 Service 簡(jiǎn)介(★★★) 很多情況下,一些與用戶(hù)很少需要產(chǎn)生交互的應(yīng)用程...
    Rtia閱讀 3,235評(píng)論 1 21
  • Android學(xué)習(xí)的第一步從四大組件開(kāi)始 在四大組件中Activity和Service應(yīng)該算的上是一對(duì)親兄弟了,兩...
    總是一點(diǎn)點(diǎn)閱讀 707評(píng)論 0 0

友情鏈接更多精彩內(nèi)容