参考资料:

http://blog.csdn.net/birdsaction/article/details/39451849

在这里我说一下学习技术的方法,别人的博客,别人的东西,再简单,自己没有写过,永远是别人的。学习技术最快的方式就是参考别人的资料,然后自己动手写一个小例子,入门,hellowWorld 到大神。

有个好用的log类,写demo,还是很爽的。然后调试,看log,解决问题。我的log类如下,然后打印的时候会打印类,方法名,行数。

12-30 14:51:23.694 19372-19372/? I/Phoenix: [MainActivity:onServiceConnected:26]: 服务连接上了
package com.example.ipc;

import android.text.TextUtils;

public final class Logger {

  private static final String TAG = "Phoenix";

  /**
* Set true or false if you want read logs or not
*/
private static boolean logEnabled_d = true;
private static boolean logEnabled_i = true;
private static boolean logEnabled_e = true; public static void d() {
if (logEnabled_d) {
android.util.Log.v(TAG, getLocation());
}
} public static void d(String msg) {
if (logEnabled_d) {
android.util.Log.v(TAG, getLocation() + msg);
}
} public static void i(String msg) {
if (logEnabled_i) {
android.util.Log.i(TAG, getLocation() + msg);
}
} public static void i() {
if (logEnabled_i) {
android.util.Log.i(TAG, getLocation());
}
} public static void e(String msg) {
if (logEnabled_e) {
android.util.Log.e(TAG, getLocation() + msg);
}
} public static void e(String msg, Throwable e) {
if (logEnabled_e) {
android.util.Log.e(TAG, getLocation() + msg, e);
}
} public static void e(Throwable e) {
if (logEnabled_e) {
android.util.Log.e(TAG, getLocation(), e);
}
} public static void e() {
if (logEnabled_e) {
android.util.Log.e(TAG, getLocation());
}
} private static String getLocation() {
final String className = Logger.class.getName();
final StackTraceElement[] traces = Thread.currentThread().getStackTrace();
boolean found = false; for (StackTraceElement trace : traces) {
try {
if (found) {
if (!trace.getClassName().startsWith(className)) {
Class<?> clazz = Class.forName(trace.getClassName());
return "["
+ getClassName(clazz)
+ ":"
+ trace.getMethodName()
+ ":"
+ trace.getLineNumber()
+ "]: ";
}
} else if (trace.getClassName().startsWith(className)) {
found = true;
}
} catch (ClassNotFoundException ignored) {
}
} return "[]: ";
} private static String getClassName(Class<?> clazz) {
if (clazz != null) {
if (!TextUtils.isEmpty(clazz.getSimpleName())) {
return clazz.getSimpleName();
} return getClassName(clazz.getEnclosingClass());
} return "";
}
}

下面介绍ipc:

1.写一个service:

package com.example.ipc;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.support.annotation.Nullable; /**
* Created by caoxinyu on 2016/12/30.
* <p>
* 类的作用:
*/ public class MyService extends Service {
Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
// super.handleMessage(msg);
Logger.i((String) msg.obj); // switch (msg.what){
// case 1:
// Logger.i(msg.obj.toString());
// break;
// }
}
};
private Messenger mMessenger; public MyService() {
} @Override
public void onCreate() {
super.onCreate();
mMessenger = new Messenger(mHandler);
} @Nullable
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
}

别忘了在androidMesfest.xml 里面注册

2.写一个activity:


package com.example.ipc; import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class MainActivity extends AppCompatActivity { private Messenger mMessenger; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindService(new Intent(this, MyService.class), new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mMessenger = new Messenger(iBinder);
Logger.i("服务连接上了");
//服务连上之后才可以发送消息
sendMessage();
} @Override
public void onServiceDisconnected(ComponentName componentName) { }
}, Context.BIND_AUTO_CREATE); } private void sendMessage() {
if (mMessenger != null) {
Message message= Message.obtain();
message.what=1;
message.obj="我是从mainActivity 发送来的";
try {
mMessenger.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}

其实就是进程间发消息。bindService。 不用写aidl那么麻烦。

android IPC 进程间通讯的更多相关文章

  1. Android Binder 进程间通讯机制梳理

    什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一.Binder的设计采用了面向对象的思想,在Binder通信模型的四 ...

  2. 守护进程,进程安全,IPC进程间通讯,生产者消费者模型

    1.守护进程(了解)2.进程安全(*****) 互斥锁 抢票案例3.IPC进程间通讯 manager queue(*****)4.生产者消费者模型 守护进程 指的也是一个进程,可以守护着另一个进程 一 ...

  3. 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制【转】

    本文转载自:https://blog.csdn.net/freekiteyu/article/details/70082302 Android-Binder进程间通讯机制 概述 最近在学习Binder ...

  4. ipc 进程间通讯的AIDL

    1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间 ...

  5. 【IPC进程间通讯之二】管道Pipe

    IPC进程间通信+管道Pipe                IPC(Inter-Process Communication.进程间通信).         管道用于进程间共享数据,事实上质是共享内存 ...

  6. 【IPC进程间通讯之中的一个】邮槽MailSlot

    IPC进程间通信+邮槽MailSlot                IPC(Inter-Process Communication.进程间通信).        现代计算机採用虚拟内存机制,为进程提 ...

  7. 【IPC进程间通讯之三】内存映射文件Mapping File

    IPC进程间通信+共享内存Mapping                IPC(Inter-Process Communication.进程间通信).         文件映射(Mapping)是一种 ...

  8. Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...

  9. Android AIDL 进行进程间通讯(IPC)

    编写AIDL文件时,需要注意: 1.接口名和aidl文件名相同. 2.接口和方法前不用加访问权限修饰符 (public.private.protected等,也不能用final.static). 3. ...

随机推荐

  1. Spring Cloud程序报错总结

    1.com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: 原因如下: 在默认设置下,Eureka服务 ...

  2. Mysql学习第四天

    1.跟用户相关的命令 (了解). DCL语句    1.1. 创建一个新的用户        CREATE USER 用户名@地址 IDENTIFIED BY '密码';        CREATE ...

  3. Node.js-sublime text3 配置node.js(ERROR: The process "node.exe" not found.)

    默认已经安装好sublime.node和npm 1.sublime的node.js插件下载 由于在package control上经常下载失败,所以这里直接从GitHub上进行下载! GitHub下载 ...

  4. 笨办法学Python(十)

    习题 10: 那是什么? 在习题 9 中我你接触了一些新东西.我让你看到两种让字符串扩展到多行的方法.第一种方法是在月份之间用 \n (back-slash n )隔开.这两个字符的作用是在该位置上放 ...

  5. PHP:将json数据放进html标签中的详细讲解

    1.在controller中调用某方法,得到最终的json数据.根据框架开发形式,将Json数据传入视图中 2.在视图中,我们放置一个hidden形式的标签,并获取到json数据 3.这时候,我们查看 ...

  6. My First Blog in Cnblogs

    终于打算从csdn搬到博客园了 虽然在csdn只写过三篇文章,不过打算写第四篇的时候发现原先的三篇都消失了.联系客服最终还是找回了,不过对于csdn神奇的管理方式还是不放心,也没在csdn上再写过文章 ...

  7. MHA故障切换方案

    mha故障切换当master 挂掉后会自动切换到slave01上去,可以看 tailf /var/mha_log/manager.log4个问题:1,切换后且原master01mysql服务启动OK, ...

  8. ASP .NET CORE 读取配置文件的方法

    老式的config文件在ASP.net core2.0中变成了appsettings.json,如果想要读取自定义配置,可以写如下代码 { "Logging": { "I ...

  9. python 将表格多个列数据放到同一个单元格中

      表格模板: 目的将卡片1到卡片5的所有数据组合起来到一个单元格中如下入F列中(工作中为了避免手动复制粘贴),其余不变,因为数据太多 自己一个一个复制工作效率太低,所以写这个脚本是为了方便自己有需要 ...

  10. 2017.11.18 C语言的算法分析题目

    算法分析 1. 选定实验题目,仔细阅读实验要求,设计好输入输出,按照分治法的思想构思算法,选取合适的存储结构实现应用的操作. 2. 设计的结果应在Visual C++ 实验环境下实现并进行调试.(也可 ...