2024年[Android]IPC通信之Messenger的使用方法介绍,android设计模式面试题

最后

总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。

这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!




我们可以通过传入一个Handler或者一个IBinder对象获取到远程Messenger,并且Messenger对象本身也可以返回IBinder对象供外部调用。



public IBinder getBinder() { throw new RuntimeException(“Stub!”); }




Messenger发送Message对象的方法是:



public void send(Message message) throws RemoteException { throw new RuntimeException(“Stub!”); }




我们可以看到Messenger之间是通过Message来进行数据交换的。  

下面我们将编写一个例子来学习Messenger的使用方法。  

我们编写Server类用来接受Client的消息并返回消息。Server类的代码如下:



package string.pub.messenger.service;

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;

public class Server {

private Messenger server=new Messenger(new Handler(new Handler.Callback() {



    @Override

    public boolean handleMessage(Message paramMessage) {

        // TODO Auto-generated method stub

        Log.d("123", paramMessage.getData().getString("msg"));

        Messenger mMessenger=paramMessage.replyTo;

        Message msg=new Message();

        Bundle mBundle=new Bundle();

        mBundle.putString("msg", "a value form server");

        msg.setData(mBundle);

        try {

            mMessenger.send(msg);

        } catch (RemoteException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return true;

    }

}));



//向外暴露IBinder对象

public IBinder getIBinder(){

    return server.getBinder();

}

}




Client的代码如下:



package string.pub.messenger.client;

import android.os.Handler;

import android.os.IBinder;

import android.os.Message;

import android.os.Messenger;

import android.util.Log;

public class Client {

private Messenger client=new Messenger(new Handler(new Handler.Callback() {



    @Override

    public boolean handleMessage(Message paramMessage) {

        // TODO Auto-generated method stub

        Log.d("123", paramMessage.getData().getString("msg"));

        return true;

    }

}));



//向外暴露IBinder对象

public IBinder getIBinder(){

    return client.getBinder();

}

}




Server和Client的类图如下:



![这里写图片描述](https://img-blog.csdn.net/20160407000723994)



他们都是通过Handler对象构造一个Messenger对象,并且将自己的IBinder对象暴露给外界使用。  

Server类的功能是接受Client的消息之后返回一个消息(“a value from server”)。  

Client类的功能是发送一个消息(“a value from client”)到Server类。



主Activity类的代码如下:



package string.pub.messenger;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.os.Message;

import android.os.Messenger;

import android.os.RemoteException;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

import string.pub.messenger.client.Client;

import string.pub.messenger.service.Server;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    LinearLayout mLinearLayout=(LinearLayout) this.getLayoutInflater().inflate(R.layout.activity_main,null);

    final Client client=new Client();

最后

希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

形式给大家展示一小部分。

[外链图片转存中…(img-ez26rDjD-1715693177040)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值