編輯:關於Android編程
在上一篇文章中《Android 基於Netty的消息推送方案之字符串的接收和發送(三)》我們介紹了Netty的字符串傳遞,我們知道了Netty的消息傳遞都是基於流,通過ChannelBuffer傳遞的,那麼自然,Object也需要轉換成ChannelBuffer來傳遞。好在Netty本身已經給我們寫好了這樣的轉換工具。ObjectEncoder和ObjectDecoder,下面我們介紹一個案例。
1. 我們構造一個用來傳輸的對象(JavaBean)
@SuppressWarnings("serial")
public class Command implements Serializable {
private String actionName;
public String getActionName() {
return actionName;
}
public void setActionName(String actionName) {
this.actionName = actionName;
}
}
2.我們先看一下Client的代碼
public class ObjectClient {
public static void main(String args[]) {
ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new ObjectEncoder(), new ObjectClientHandler());
}
});
bootstrap.connect(new InetSocketAddress("127.0.0.1", 8000));
}
}
class ObjectClientHandler extends SimpleChannelHandler {
/**
* 當綁定到服務端的時候觸發,給服務端發消息。
*/
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
// 向服務端發送Object信息
sendObject(e.getChannel());
}
/**
* 發送Object
* @param channel
*/
private void sendObject(Channel channel) {
Command command = new Command();
command.setActionName("Hello action.");
channel.write(command);
}
}3.再看一下服務端的代碼
public class ObjectServer {
public static void main(String args[]) {
// Server服務啟動器
ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
// 設置一個處理客戶端消息和各種消息事件的類(Handler)
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
//先編碼 --> 後處理自己的業務
return Channels.pipeline(new ObjectDecoder(ClassResolvers.cacheDisabled(this.getClass().getClassLoader())), new ObjectServerHandler());
}
});
bootstrap.bind(new InetSocketAddress(8000));
}
}
class ObjectServerHandler extends SimpleChannelHandler {
/**
* 當接受到消息的時候觸發
*/
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
Command command = (Command) e.getMessage();
// 打印看看是不是我們剛才傳過來的那個
System.out.println(command.getActionName());
}
}
先運行服務端,再運行客戶端,然後在服務端的控制台中打印如下字符串
Hello action.
Android開啟多進程
1. 為何要開啟多進程為何開啟android應用要開啟多進程,主要有以下幾點:單進程所分配的內存不夠,需要更多的內存。在早期android系統只為一個單進程的應用分配了1
android中使用百度定位sdk實時的計算移動距離
前段時間因為項目需求,通過百度定位adk寫了一個實時更新距離的程序(類似大家坐的士時,車上的裡程表),遇到很多技術點,總結了一下發表出來和大家相互學習。直接要求定位具體的
Android 設計模式之策略模式
策略模式的定義:定義算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。本質:分離算法,選擇實現 面向對象設計原則: 封裝變化 多用組合
Android左右滑出菜單實例分析
現在的Android應用,只要有一個什麼新的創意,過不了多久,幾乎所有的應用都帶這個創意。這不,咱們公司最近的一個持續性的項目,想在首頁加個從左滑動出來的菜單,我查閱網上