这篇文章主要为大家详细介绍了使用Messenger实现Service的双向通信,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android体系架构中有一个解决方案:利用Android Messenger实现Service进程间双向通信。
MainActivity 类:
package com.example.messengeservicetest;
import android.app.Activity;
import android.app.Service;
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.text.style.IconMarginSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Messenger sender;
private ServiceConnection conn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bind = (Button)findViewById(R.id.bind);
Button start = (Button)findViewById(R.id.start);
Button send = (Button)findViewById(R.id.send);
bind.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getStart();
}
});
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MessengerService.class);
startService(intent);
}
});
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sendCount();
}
});
}
// 用于启动 MessengerService
private void getStart(){
conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
sender = new Messenger(service);
}
};
Intent intent = new Intent(this, MessengerService.class);
// startService(intent);
bindService(intent, conn, Service.BIND_AUTO_CREATE);
}
// 传递数值
private void sendCount(){
Message msg = new Message();
msg.arg1 = 20;
msg.arg2 = 20;
try {
sender.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
}
}
MessengerService.java 类:
package com.example.messengeservicetest;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;
public class MessengerService extends Service {
Messenger messenger;
Handler handler;
int a, b;
int sum = 0;
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
@Override
public void onCreate() {
super.onCreate();
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
a = msg.arg1;
b = msg.arg2;
}
};
messenger = new Messenger(handler);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int sum = subSum(a, b);
System.out.println(sum + "");
return super.onStartCommand(intent, flags, startId);
}
private int subSum(int a, int b){
int sum = a + b;
return sum;
}
}
在 AndroidManifest.xml 中注册:
<service android:name=".MessengerService"></service>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:使用Messenger实现Service的双向通信
猜你喜欢
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- Flutter实现底部和顶部导航栏 2022-08-31
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- 详解flutter engine 那些没被释放的东西 2022-12-04
- Android studio实现动态背景页面 2023-05-23
- iOS 对当前webView进行截屏的方法 2023-03-01
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- Android实现监听音量的变化 2023-03-30
- Android实现轮询的三种方式 2023-02-17
