1.Handler的工作流程( 二 )


这段代码很简单的说明了中的obj与what的功能
obj主要用来携带值,what是一个标志,在()中我们通过what这个标志进行处理
2.2.
这个标志在IPC通讯的中我们用过,
在另一个进程中
public class MyService extends Service {private static class MessengerHandler extends Handler{@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 1:Log.d("TAG",msg.getData().getString("data"));Messenger client = msg.replyTo;Message replyMessage = new Message();replyMessage.what = 2;Bundle bundle = new Bundle();bundle.putString("TAG","reply"+"我大后台收到你的来信了");replyMessage.setData(bundle);try {client.send(replyMessage);} catch (RemoteException e) {e.printStackTrace();}break;default:break;}}}private final Messenger mMessenger = new Messenger(new MessengerHandler());@Nullable@Overridepublic IBinder onBind(Intent intent) {return mMessenger.getBinder();}}
我们通过
Messenger client = msg.replyTo;
获得了传递过来的,然后接着获取给我们传递的消息,同时我们又用刚才获得的给发送消息
在中
public class MainActivity extends AppCompatActivity {// 服务端Messengerprivate Messenger mServerMessenger;// 服务端连接状态private boolean mIsBound = false;// 绑定服务端private Button message_0;private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mServerMessenger = new Messenger(service);Message message = new Message();message.what = 1;Bundle bundle = new Bundle();bundle.putString("data","你好啊");message.setData(bundle);message.replyTo = mGetReplyMessenger;try {mServerMessenger.send(message);} catch (RemoteException e) {e.printStackTrace();}}@Overridepublic void onServiceDisconnected(ComponentName name) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);message_0 = findViewById(R.id.message_0);// 绑定服务端if(!mIsBound) {message_0.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mIsBound = true;Intent intent = new Intent(MainActivity.this, MyService.class);bindService(intent, mConnection, Context.BIND_AUTO_CREATE);}});}}@Overrideprotected void onDestroy() {super.onDestroy();// 解绑服务端unbindService(mConnection);}private Messenger mGetReplyMessenger = new Messenger(new MessengerHandle());private static class MessengerHandle extends Handler{@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 2:Log.d("TAG",msg.getData().getString("TAG").toString());}}}}
我们主要看最后面的这个在中被初始化
message.replyTo = mGetReplyMessenger;
然后获得那个进程给我们传递过来的值
2.2. 2..post()与.()
.post() 和 .() 都是类提供的方法 , 用于向消息队列发送消息并在指定的时间后处理消息 。它们的主要区别在于消息的发送方式和处理机制 。
.post():该方法用于将一个对象提交到消息队列中 , 以便在主线程中执行 。它不需要创建对象 , 而是直接将对象封装成消息并发送到消息队列 。当消息处理时 ,  会将对象的 run() 方法执行在主线程中 。
handler.post(new Runnable() {@Overridepublic void run() {// 在主线程中执行的操作}});

1.Handler的工作流程

文章插图
2..():该方法用于发送一个对象到消息队列中 , 在指定的时间后处理消息 。它需要创建一个对象 , 并使用 .() 将消息发送到消息队列中 。当消息处理时 ,  会回调 .() 方法来处理消息 。