android ipc简单理解,Android IPC 机制【1】--简介
一、android 中進(jìn)程間通信常用的有以下幾種機(jī)制
-----------------------------------------------------------------------------------------------------------------------
名稱 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 優(yōu)點(diǎn)????????????????????????? ? ? ? ? ? ? ? ? ?缺點(diǎn)????????????????????????????????????? ? ? ? ? ? ? ? 適用場景
-----------------------------------------------------------------------------------------------------------------------
Bundle ? ? ? ? ? ? ? ? ? ? ? ? ? ? 簡單易用 ? ? ? ? ? ? ? ? ? ? 只能傳輸Bundle支持的數(shù)據(jù)類型 ? ? ? ? ? ? ?四大組件間的進(jìn)程通信
-----------------------------------------------------------------------------------------------------------------------
文件共享 ? ? ? ? ? ? ? ? ? ? ? ? ?簡單易用 ? ? ? ? ? ? ? ? ? ? ?不適合高并發(fā)場景,并且無法做到 ? ? ? 無并發(fā)訪問情形,交換簡單
進(jìn)程間及時(shí)通信?????????????????????????????的數(shù)據(jù)實(shí)時(shí)性不高的場景
-----------------------------------------------------------------------------------------------------------------------
AIDL ? ? ? ? ? ????????????功能強(qiáng)大,支持一對多并發(fā) ? ? ? ?使用稍復(fù)雜,需要處理好線程同步 ? ? ?一對多通信且有RPC需求
通信,支持實(shí)時(shí)通信
-----------------------------------------------------------------------------------------------------------------------
Messenger ?????????功能一般,支持一對多串行 ? ? 不能很好處理高并發(fā)情形,不支持 ? ? ? ? ? 低并發(fā)的一對多即時(shí)通
通信,支持實(shí)時(shí)通信 ? ? ? ? ? ? ??RPC, 數(shù)據(jù)通過Message進(jìn)行傳輸 ? ? ? ? ?信,無RPC需求?或者無需
只能傳輸Bundle支持的數(shù)據(jù) 類型 ? ? ? ? ??返回結(jié)果的RPC需求
----------------------------------------------------------------------------------------------------------------------
ContentProvider????在數(shù)據(jù)源訪問頁面功能強(qiáng)大, ? ? ? ?可以理解為受約束的AIDL, ? ? ? ?一對多的進(jìn)程間的數(shù)據(jù)共享
支持一對多并發(fā)數(shù)據(jù)共享, ? ? ? ? ? 主要提?供數(shù)據(jù)源的CRUD操作
可通過Call方法擴(kuò)展其他操作
----------------------------------------------------------------------------------------------------------------------
Socket ? ? ? ? ? ? ? ? ?功能強(qiáng)大,可以通過網(wǎng)絡(luò)數(shù) ? ? ? ? ? ? 實(shí)現(xiàn)細(xì)節(jié)有點(diǎn)繁瑣 ? ? ? ? ? ? ? ? ? ? ? ? ?網(wǎng)絡(luò)數(shù)據(jù)交換
字傳輸節(jié)流,支持一對多 ? ? ? ? ? ? ? ?,不支持直接的RPC
并發(fā)實(shí)時(shí)通信
---------------------------------------------------------------------------------------------------------------------
二、 Bundle
Bundle實(shí)現(xiàn)了Parcelable接口,所以可以方便的在不同進(jìn)程間傳輸,當(dāng)在一個(gè)進(jìn)程中啟動(dòng)了另外一個(gè)進(jìn)程的Activity、Service、Receiver,可以在Bundle中附加需要傳輸給遠(yuǎn)程進(jìn)程的信息并通過Intent發(fā)送出去。
三、文件共享
Activity1:-----------------
private?void?persistToFile()?{
new?Thread(new?Runnable()?{
@Override
public?void?run()?{
User?user?=?new?User(1,?"hello?world",?false);
File?dir?=?new?File(MyConstants.CHAPTER_2_PATH);
if?(!dir.exists())?{
dir.mkdirs();
}
File?cachedFile?=?new?File(MyConstants.CACHE_FILE_PATH);
ObjectOutputStream?objectOutputStream?=?null;
try?{
objectOutputStream?=?new?ObjectOutputStream(
new?FileOutputStream(cachedFile));
objectOutputStream.writeObject(user);//利用Serializable序列化的過程
Log.d(TAG,?"persist?user:"?+?user);
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
MyUtils.close(objectOutputStream);
}
}
}).start();
}
Activity2:----------------
private?void?recoverFromFile()?{
new?Thread(new?Runnable()?{
@Override
public?void?run()?{
User?user?=?null;
File?cachedFile?=?new?File(MyConstants.CACHE_FILE_PATH);
if?(cachedFile.exists())?{
//對MainActivity中user對象反序列化的過程(Serializable),
//得到的是一個(gè)新的對象
ObjectInputStream?objectInputStream?=?null;
try?{
objectInputStream?=?new?ObjectInputStream(
new?FileInputStream(cachedFile));
user?=?(User)?objectInputStream.readObject();
Log.d(TAG,?"recover?user:"?+?user);
}?catch?(IOException?e)?{
e.printStackTrace();
}?catch?(ClassNotFoundException?e)?{
e.printStackTrace();
}?finally?{
MyUtils.close(objectInputStream);
}
}
}
}).start();
}
總結(jié)
以上是生活随笔為你收集整理的android ipc简单理解,Android IPC 机制【1】--简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀幽冥火和地狱火的区别
- 下一篇: android+静态密钥,Android