android ipc简单理解,Android IPC 机制【1】--简介
一、android 中進程間通信常用的有以下幾種機制
-----------------------------------------------------------------------------------------------------------------------
名稱 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 優點????????????????????????? ? ? ? ? ? ? ? ? ?缺點????????????????????????????????????? ? ? ? ? ? ? ? 適用場景
-----------------------------------------------------------------------------------------------------------------------
Bundle ? ? ? ? ? ? ? ? ? ? ? ? ? ? 簡單易用 ? ? ? ? ? ? ? ? ? ? 只能傳輸Bundle支持的數據類型 ? ? ? ? ? ? ?四大組件間的進程通信
-----------------------------------------------------------------------------------------------------------------------
文件共享 ? ? ? ? ? ? ? ? ? ? ? ? ?簡單易用 ? ? ? ? ? ? ? ? ? ? ?不適合高并發場景,并且無法做到 ? ? ? 無并發訪問情形,交換簡單
進程間及時通信?????????????????????????????的數據實時性不高的場景
-----------------------------------------------------------------------------------------------------------------------
AIDL ? ? ? ? ? ????????????功能強大,支持一對多并發 ? ? ? ?使用稍復雜,需要處理好線程同步 ? ? ?一對多通信且有RPC需求
通信,支持實時通信
-----------------------------------------------------------------------------------------------------------------------
Messenger ?????????功能一般,支持一對多串行 ? ? 不能很好處理高并發情形,不支持 ? ? ? ? ? 低并發的一對多即時通
通信,支持實時通信 ? ? ? ? ? ? ??RPC, 數據通過Message進行傳輸 ? ? ? ? ?信,無RPC需求?或者無需
只能傳輸Bundle支持的數據 類型 ? ? ? ? ??返回結果的RPC需求
----------------------------------------------------------------------------------------------------------------------
ContentProvider????在數據源訪問頁面功能強大, ? ? ? ?可以理解為受約束的AIDL, ? ? ? ?一對多的進程間的數據共享
支持一對多并發數據共享, ? ? ? ? ? 主要提?供數據源的CRUD操作
可通過Call方法擴展其他操作
----------------------------------------------------------------------------------------------------------------------
Socket ? ? ? ? ? ? ? ? ?功能強大,可以通過網絡數 ? ? ? ? ? ? 實現細節有點繁瑣 ? ? ? ? ? ? ? ? ? ? ? ? ?網絡數據交換
字傳輸節流,支持一對多 ? ? ? ? ? ? ? ?,不支持直接的RPC
并發實時通信
---------------------------------------------------------------------------------------------------------------------
二、 Bundle
Bundle實現了Parcelable接口,所以可以方便的在不同進程間傳輸,當在一個進程中啟動了另外一個進程的Activity、Service、Receiver,可以在Bundle中附加需要傳輸給遠程進程的信息并通過Intent發送出去。
三、文件共享
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),
//得到的是一個新的對象
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();
}
總結
以上是生活随笔為你收集整理的android ipc简单理解,Android IPC 机制【1】--简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀幽冥火和地狱火的区别
- 下一篇: android sina oauth2.