Android 多进程通信之Messenger
来源:互联网 发布:nginx 多个location 编辑:程序博客网 时间:2024/04/29 22:13
多进程通信有:ContentProvider、广播、文件、SharedPreferences、AIDL。
Messenger能实现多进程通信是因为Messenger底层就是AIDL实现的。
主进程MainActivity:
public class MainActivity extends AppCompatActivity { private boolean isConnect = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this,MyService.class); bindService(intent,connection,BIND_AUTO_CREATE); findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Message msg = Message.obtain(null,1); Bundle bundle = new Bundle(); bundle.putString("data","来自主进程信息"); msg.setData(bundle); msg.replyTo = mMessenger; try { if (isConnect) serviceMsg.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } }); } private Messenger serviceMsg; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { serviceMsg = new Messenger(service); isConnect = true; } @Override public void onServiceDisconnected(ComponentName name) { isConnect = false; } }; private Messenger mMessenger = new Messenger(new Handler() { @Override public void handleMessage(Message msg){ Log.e("Activity",""+msg.getData().getString("data")); } }); @Override protected void onDestroy() { super.onDestroy(); unbindService(connection); }}
remote进程的service:
public class MyService extends Service{ private final Messenger messenger = new Messenger(new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what == 1) { Log.e("Service",""+msg.getData().getString("data")); } try { Thread.sleep(2000); Bundle bundle = new Bundle(); bundle.putString("data","来自service的信息"); msg.setData(bundle); msg.replyTo.send(msg); } catch (InterruptedException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }); @Nullable @Override public IBinder onBind(Intent intent) { return messenger.getBinder(); }}
AndroidManifest:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.flk.ipc"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" android:process=":remote"/> </application></manifest>
0 0
- Android 多进程通信之Messenger
- android 进程通信之messenger
- android进程间通信之Messenger
- Android进程间通信之Messenger
- android开发笔记之进程通信Messenger
- Android进程间通信之使用Messenger
- Android进程间通信之Messenger浅析
- Android进程间通信之使用Messenger
- Android进程间通信(IPC)之Messenger
- 初识Android进程间通信之---Messenger
- Android进程间通信之Messenger
- android-----IPC进程间通信之Messenger
- Android 进程间通信之Messenger
- android—进程间通信之Messenger
- Android 进程间通信之使用Messenger
- Android进程间通信之使用Messenger
- Android进程间通信之Messenger
- Android 进程间通信之Messenger
- 洛谷 3893: [Usaco2014 Dec]Cow Jog
- Linux core dump
- 支配树(Dominator tree)学习笔记 及HDU4694Important Sisters
- BZOJ1007: [HNOI2008]水平可见直线
- 一天一条Linux指令-date
- Android 多进程通信之Messenger
- 安卓统一添加activity切换动画
- 利用gradle进行多渠道打包
- highcharts获取Y轴名称
- 全面剖析Redis Cluster原理和应用
- linux下 配置JDK
- 进度
- DBUG的一些方法
- 关于BSS段的大小